From 5bfab95a94ad510bc810bd58ad89a8b211f06448 Mon Sep 17 00:00:00 2001 From: kaznacheeva Date: Sat, 23 Nov 2024 12:21:27 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=B8=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab_4/Lab4.ipynb | 1085 +++++++++++++++++++++++----------------------- 1 file changed, 546 insertions(+), 539 deletions(-) diff --git a/lab_4/Lab4.ipynb b/lab_4/Lab4.ipynb index 814ef70..c43967a 100644 --- a/lab_4/Lab4.ipynb +++ b/lab_4/Lab4.ipynb @@ -337,9 +337,16 @@ "print(df.isnull().any())" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Классификация" + ] + }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -1248,45 +1255,104 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Теперь перейдем к делению на выборки и созданию ориентира" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Размер обучающей выборки: (3004, 10)\n", + "Размер тестовой выборки: (751, 10)\n", + "Baseline Accuracy: 0.5126498002663116\n", + "Baseline F1 Score: 0.3474826991241725\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.metrics import accuracy_score, f1_score\n", + "\n", + "# Загрузка данных\n", + "df = pd.read_csv(\"..//static//csv//ds_salaries.csv\")\n", + "\n", + "# Создание целевого признака\n", + "median_salary = df['salary_in_usd'].median()\n", + "df['above_median_salary'] = np.where(df['salary_in_usd'] > median_salary, 1, 0)\n", + "\n", + "# Разделение на признаки и целевую переменную\n", + "features = ['work_year', 'experience_level', 'employment_type', 'job_title', 'salary', 'salary_currency', 'remote_ratio', 'employee_residence', 'company_location', 'company_size']\n", + "target = 'above_median_salary'\n", + "\n", + "# Разделение данных на тренировочный и тестовый наборы\n", + "X_train, X_test, y_train, y_test = train_test_split(df[features], df[target], test_size=0.2, random_state=42, stratify=df[target])\n", + "\n", + "print(\"Размер обучающей выборки:\", X_train.shape)\n", + "print(\"Размер тестовой выборки:\", X_test.shape)\n", + "\n", + "# Создание ориентира (baseline)\n", + "baseline_threshold = y_train.mean()\n", + "baseline_predictions = [1 if pred > baseline_threshold else 0 for pred in [baseline_threshold] * len(y_test)]\n", + "\n", + "# Вычисление метрик для ориентира\n", + "baseline_accuracy = accuracy_score(y_test, baseline_predictions)\n", + "baseline_f1 = f1_score(y_test, baseline_predictions, average='weighted')\n", + "\n", + "print('Baseline Accuracy:', baseline_accuracy)\n", + "print('Baseline F1 Score:', baseline_f1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Создание конвейера и обучение моделей" + ] + }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { - "ename": "IndexError", - "evalue": "Index dimension must be 1 or 2", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mIndexError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[14], line 71\u001b[0m\n\u001b[0;32m 62\u001b[0m pipeline_end \u001b[38;5;241m=\u001b[39m Pipeline(\n\u001b[0;32m 63\u001b[0m [\n\u001b[0;32m 64\u001b[0m (\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfeatures_preprocessing\u001b[39m\u001b[38;5;124m\"\u001b[39m, features_preprocessing),\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 67\u001b[0m ]\n\u001b[0;32m 68\u001b[0m )\n\u001b[0;32m 70\u001b[0m \u001b[38;5;66;03m# Демонстрация работы конвейера для предобработки данных при классификации\u001b[39;00m\n\u001b[1;32m---> 71\u001b[0m preprocessing_result \u001b[38;5;241m=\u001b[39m \u001b[43mpipeline_end\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit_transform\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX_train\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 72\u001b[0m preprocessed_df \u001b[38;5;241m=\u001b[39m pd\u001b[38;5;241m.\u001b[39mDataFrame(\n\u001b[0;32m 73\u001b[0m preprocessing_result,\n\u001b[0;32m 74\u001b[0m columns\u001b[38;5;241m=\u001b[39mpipeline_end\u001b[38;5;241m.\u001b[39mget_feature_names_out(),\n\u001b[0;32m 75\u001b[0m )\n\u001b[0;32m 77\u001b[0m preprocessed_df\n", - "File \u001b[1;32md:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\base.py:1473\u001b[0m, in \u001b[0;36m_fit_context..decorator..wrapper\u001b[1;34m(estimator, *args, **kwargs)\u001b[0m\n\u001b[0;32m 1466\u001b[0m estimator\u001b[38;5;241m.\u001b[39m_validate_params()\n\u001b[0;32m 1468\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m config_context(\n\u001b[0;32m 1469\u001b[0m skip_parameter_validation\u001b[38;5;241m=\u001b[39m(\n\u001b[0;32m 1470\u001b[0m prefer_skip_nested_validation \u001b[38;5;129;01mor\u001b[39;00m global_skip_validation\n\u001b[0;32m 1471\u001b[0m )\n\u001b[0;32m 1472\u001b[0m ):\n\u001b[1;32m-> 1473\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfit_method\u001b[49m\u001b[43m(\u001b[49m\u001b[43mestimator\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32md:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\pipeline.py:533\u001b[0m, in \u001b[0;36mPipeline.fit_transform\u001b[1;34m(self, X, y, **params)\u001b[0m\n\u001b[0;32m 490\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Fit the model and transform with the final estimator.\u001b[39;00m\n\u001b[0;32m 491\u001b[0m \n\u001b[0;32m 492\u001b[0m \u001b[38;5;124;03mFit all the transformers one after the other and sequentially transform\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 530\u001b[0m \u001b[38;5;124;03m Transformed samples.\u001b[39;00m\n\u001b[0;32m 531\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 532\u001b[0m routed_params \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_method_params(method\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfit_transform\u001b[39m\u001b[38;5;124m\"\u001b[39m, props\u001b[38;5;241m=\u001b[39mparams)\n\u001b[1;32m--> 533\u001b[0m Xt \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_fit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mrouted_params\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 535\u001b[0m last_step \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_final_estimator\n\u001b[0;32m 536\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m _print_elapsed_time(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mPipeline\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_log_message(\u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msteps) \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m1\u001b[39m)):\n", - "File \u001b[1;32md:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\pipeline.py:406\u001b[0m, in \u001b[0;36mPipeline._fit\u001b[1;34m(self, X, y, routed_params)\u001b[0m\n\u001b[0;32m 404\u001b[0m cloned_transformer \u001b[38;5;241m=\u001b[39m clone(transformer)\n\u001b[0;32m 405\u001b[0m \u001b[38;5;66;03m# Fit or load from cache the current transformer\u001b[39;00m\n\u001b[1;32m--> 406\u001b[0m X, fitted_transformer \u001b[38;5;241m=\u001b[39m \u001b[43mfit_transform_one_cached\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m 407\u001b[0m \u001b[43m \u001b[49m\u001b[43mcloned_transformer\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 408\u001b[0m \u001b[43m \u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 409\u001b[0m \u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 410\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[0;32m 411\u001b[0m \u001b[43m \u001b[49m\u001b[43mmessage_clsname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mPipeline\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[0;32m 412\u001b[0m \u001b[43m \u001b[49m\u001b[43mmessage\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_log_message\u001b[49m\u001b[43m(\u001b[49m\u001b[43mstep_idx\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 413\u001b[0m \u001b[43m \u001b[49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrouted_params\u001b[49m\u001b[43m[\u001b[49m\u001b[43mname\u001b[49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m 414\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 415\u001b[0m \u001b[38;5;66;03m# Replace the transformer of the step with the fitted\u001b[39;00m\n\u001b[0;32m 416\u001b[0m \u001b[38;5;66;03m# transformer. This is necessary when loading the transformer\u001b[39;00m\n\u001b[0;32m 417\u001b[0m \u001b[38;5;66;03m# from the cache.\u001b[39;00m\n\u001b[0;32m 418\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msteps[step_idx] \u001b[38;5;241m=\u001b[39m (name, fitted_transformer)\n", - "File \u001b[1;32md:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\joblib\\memory.py:312\u001b[0m, in \u001b[0;36mNotMemorizedFunc.__call__\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 311\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__call__\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m--> 312\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[1;32md:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\pipeline.py:1310\u001b[0m, in \u001b[0;36m_fit_transform_one\u001b[1;34m(transformer, X, y, weight, message_clsname, message, params)\u001b[0m\n\u001b[0;32m 1308\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m _print_elapsed_time(message_clsname, message):\n\u001b[0;32m 1309\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(transformer, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfit_transform\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[1;32m-> 1310\u001b[0m res \u001b[38;5;241m=\u001b[39m \u001b[43mtransformer\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit_transform\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43my\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mparams\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mfit_transform\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m{\u001b[49m\u001b[43m}\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1311\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 1312\u001b[0m res \u001b[38;5;241m=\u001b[39m transformer\u001b[38;5;241m.\u001b[39mfit(X, y, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mparams\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfit\u001b[39m\u001b[38;5;124m\"\u001b[39m, {}))\u001b[38;5;241m.\u001b[39mtransform(\n\u001b[0;32m 1313\u001b[0m X, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mparams\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtransform\u001b[39m\u001b[38;5;124m\"\u001b[39m, {})\n\u001b[0;32m 1314\u001b[0m )\n", - "File \u001b[1;32md:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\utils\\_set_output.py:316\u001b[0m, in \u001b[0;36m_wrap_method_output..wrapped\u001b[1;34m(self, X, *args, **kwargs)\u001b[0m\n\u001b[0;32m 314\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(f)\n\u001b[0;32m 315\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapped\u001b[39m(\u001b[38;5;28mself\u001b[39m, X, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m--> 316\u001b[0m data_to_wrap \u001b[38;5;241m=\u001b[39m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 317\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(data_to_wrap, \u001b[38;5;28mtuple\u001b[39m):\n\u001b[0;32m 318\u001b[0m \u001b[38;5;66;03m# only wrap the first output for cross decomposition\u001b[39;00m\n\u001b[0;32m 319\u001b[0m return_tuple \u001b[38;5;241m=\u001b[39m (\n\u001b[0;32m 320\u001b[0m _wrap_data_with_container(method, data_to_wrap[\u001b[38;5;241m0\u001b[39m], X, \u001b[38;5;28mself\u001b[39m),\n\u001b[0;32m 321\u001b[0m \u001b[38;5;241m*\u001b[39mdata_to_wrap[\u001b[38;5;241m1\u001b[39m:],\n\u001b[0;32m 322\u001b[0m )\n", - "File \u001b[1;32md:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\base.py:1098\u001b[0m, in \u001b[0;36mTransformerMixin.fit_transform\u001b[1;34m(self, X, y, **fit_params)\u001b[0m\n\u001b[0;32m 1083\u001b[0m warnings\u001b[38;5;241m.\u001b[39mwarn(\n\u001b[0;32m 1084\u001b[0m (\n\u001b[0;32m 1085\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mThis object (\u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m) has a `transform`\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 1093\u001b[0m \u001b[38;5;167;01mUserWarning\u001b[39;00m,\n\u001b[0;32m 1094\u001b[0m )\n\u001b[0;32m 1096\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m y \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m 1097\u001b[0m \u001b[38;5;66;03m# fit method of arity 1 (unsupervised transformation)\u001b[39;00m\n\u001b[1;32m-> 1098\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mfit_params\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform\u001b[49m\u001b[43m(\u001b[49m\u001b[43mX\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1099\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 1100\u001b[0m \u001b[38;5;66;03m# fit method of arity 2 (supervised transformation)\u001b[39;00m\n\u001b[0;32m 1101\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfit(X, y, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mfit_params)\u001b[38;5;241m.\u001b[39mtransform(X)\n", - "File \u001b[1;32md:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\utils\\_set_output.py:316\u001b[0m, in \u001b[0;36m_wrap_method_output..wrapped\u001b[1;34m(self, X, *args, **kwargs)\u001b[0m\n\u001b[0;32m 314\u001b[0m \u001b[38;5;129m@wraps\u001b[39m(f)\n\u001b[0;32m 315\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mwrapped\u001b[39m(\u001b[38;5;28mself\u001b[39m, X, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m--> 316\u001b[0m data_to_wrap \u001b[38;5;241m=\u001b[39m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mX\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 317\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(data_to_wrap, \u001b[38;5;28mtuple\u001b[39m):\n\u001b[0;32m 318\u001b[0m \u001b[38;5;66;03m# only wrap the first output for cross decomposition\u001b[39;00m\n\u001b[0;32m 319\u001b[0m return_tuple \u001b[38;5;241m=\u001b[39m (\n\u001b[0;32m 320\u001b[0m _wrap_data_with_container(method, data_to_wrap[\u001b[38;5;241m0\u001b[39m], X, \u001b[38;5;28mself\u001b[39m),\n\u001b[0;32m 321\u001b[0m \u001b[38;5;241m*\u001b[39mdata_to_wrap[\u001b[38;5;241m1\u001b[39m:],\n\u001b[0;32m 322\u001b[0m )\n", - "Cell \u001b[1;32mIn[14], line 18\u001b[0m, in \u001b[0;36mSalaryFeatures.transform\u001b[1;34m(self, X, y)\u001b[0m\n\u001b[0;32m 15\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mtransform\u001b[39m(\u001b[38;5;28mself\u001b[39m, X, y\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m):\n\u001b[0;32m 16\u001b[0m \u001b[38;5;66;03m# Создание новых признаков\u001b[39;00m\n\u001b[0;32m 17\u001b[0m X \u001b[38;5;241m=\u001b[39m X\u001b[38;5;241m.\u001b[39mcopy()\n\u001b[1;32m---> 18\u001b[0m X[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mwork_year_to_remote_ratio\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[43mX\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mwork_year\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m \u001b[38;5;241m/\u001b[39m X[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mremote_ratio\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[0;32m 19\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m X\n", - "File \u001b[1;32md:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\scipy\\sparse\\_csr.py:24\u001b[0m, in \u001b[0;36m_csr_base.__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 22\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__getitem__\u001b[39m(\u001b[38;5;28mself\u001b[39m, key):\n\u001b[0;32m 23\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m2\u001b[39m:\n\u001b[1;32m---> 24\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__getitem__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 26\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(key, \u001b[38;5;28mtuple\u001b[39m) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(key) \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[0;32m 27\u001b[0m key \u001b[38;5;241m=\u001b[39m key[\u001b[38;5;241m0\u001b[39m]\n", - "File \u001b[1;32md:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\scipy\\sparse\\_index.py:52\u001b[0m, in \u001b[0;36mIndexMixin.__getitem__\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 51\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__getitem__\u001b[39m(\u001b[38;5;28mself\u001b[39m, key):\n\u001b[1;32m---> 52\u001b[0m row, col \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_indices\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 54\u001b[0m \u001b[38;5;66;03m# Dispatch to specialized methods.\u001b[39;00m\n\u001b[0;32m 55\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(row, INT_TYPES):\n", - "File \u001b[1;32md:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\scipy\\sparse\\_index.py:186\u001b[0m, in \u001b[0;36mIndexMixin._validate_indices\u001b[1;34m(self, key)\u001b[0m\n\u001b[0;32m 184\u001b[0m row \u001b[38;5;241m=\u001b[39m _validate_bool_idx(bool_row, M, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrow\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 185\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(row, \u001b[38;5;28mslice\u001b[39m):\n\u001b[1;32m--> 186\u001b[0m row \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_asindices\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrow\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mM\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 188\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m isintlike(col):\n\u001b[0;32m 189\u001b[0m col \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mint\u001b[39m(col)\n", - "File \u001b[1;32md:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\scipy\\sparse\\_index.py:212\u001b[0m, in \u001b[0;36mIndexMixin._asindices\u001b[1;34m(self, idx, length)\u001b[0m\n\u001b[0;32m 209\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mIndexError\u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124minvalid index\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n\u001b[0;32m 211\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m x\u001b[38;5;241m.\u001b[39mndim \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m (\u001b[38;5;241m1\u001b[39m, \u001b[38;5;241m2\u001b[39m):\n\u001b[1;32m--> 212\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mIndexError\u001b[39;00m(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIndex dimension must be 1 or 2\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[0;32m 214\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m x\u001b[38;5;241m.\u001b[39msize \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0\u001b[39m:\n\u001b[0;32m 215\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m x\n", - "\u001b[1;31mIndexError\u001b[0m: Index dimension must be 1 or 2" + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: Logistic Regression\n", + "Accuracy: 0.7523\n", + "F1 Score: 0.7609\n", + "----------------------------------------\n", + "Model: Decision Tree\n", + "Accuracy: 0.9960\n", + "F1 Score: 0.9959\n", + "----------------------------------------\n", + "Model: Gradient Boosting\n", + "Accuracy: 0.9947\n", + "F1 Score: 0.9945\n", + "----------------------------------------\n" ] } ], "source": [ - "import numpy as np\n", "import pandas as pd\n", - "from sklearn.base import BaseEstimator, TransformerMixin\n", - "from sklearn.compose import ColumnTransformer\n", - "from sklearn.impute import SimpleImputer\n", - "from sklearn.preprocessing import OneHotEncoder, StandardScaler\n", - "from sklearn.pipeline import Pipeline\n", "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.tree import DecisionTreeClassifier\n", + "from sklearn.ensemble import GradientBoostingClassifier\n", + "from sklearn.metrics import accuracy_score, f1_score\n", "\n", "# Загрузка данных\n", "df = pd.read_csv(\"..//static//csv//ds_salaries.csv\")\n", @@ -1302,168 +1368,350 @@ "# Разделение данных на тренировочный и тестовый наборы\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)\n", "\n", - "# Построение конвейеров предобработки\n", - "\n", - "class SalaryFeatures(BaseEstimator, TransformerMixin):\n", - " def __init__(self):\n", - " pass\n", - " def fit(self, X, y=None):\n", - " return self\n", - " def transform(self, X, y=None):\n", - " # Создание новых признаков\n", - " X = X.copy()\n", - " X[\"work_year_to_remote_ratio\"] = X[\"work_year\"] / X[\"remote_ratio\"]\n", - " return X\n", - " def get_feature_names_out(self, features_in):\n", - " # Добавление имен новых признаков\n", - " new_features = [\"work_year_to_remote_ratio\"]\n", - " return np.append(features_in, new_features, axis=0)\n", - "\n", - "# Обработка числовых данных. Числовой конвейер: заполнение пропущенных значений медианой и стандартизация\n", - "preprocessing_num_class = Pipeline(steps=[\n", - " ('imputer', SimpleImputer(strategy='median')),\n", - " ('scaler', StandardScaler())\n", - "])\n", - "\n", - "# Обработка категориальных данных: заполнение пропущенных значений наиболее частым значением и one-hot encoding\n", - "preprocessing_cat_class = Pipeline(steps=[\n", - " ('imputer', SimpleImputer(strategy='most_frequent')),\n", - " ('onehot', OneHotEncoder(handle_unknown='ignore'))\n", - "])\n", - "\n", "# Определение столбцов\n", - "numeric_columns = [\"work_year\", \"salary\", \"salary_in_usd\", \"remote_ratio\"]\n", + "numeric_columns = [\"work_year\", \"salary\", \"remote_ratio\"]\n", "cat_columns = [\"experience_level\", \"employment_type\", \"job_title\", \"salary_currency\", \"employee_residence\", \"company_location\", \"company_size\"]\n", "\n", - "# Предобработка признаков\n", - "features_preprocessing = ColumnTransformer(\n", - " verbose_feature_names_out=False,\n", + "# Предобработка данных\n", + "preprocessor = ColumnTransformer(\n", " transformers=[\n", - " (\"prepocessing_num\", preprocessing_num_class, numeric_columns),\n", - " (\"prepocessing_cat\", preprocessing_cat_class, cat_columns),\n", - " ],\n", - " remainder=\"passthrough\"\n", - ")\n", + " ('num', StandardScaler(), numeric_columns),\n", + " ('cat', OneHotEncoder(handle_unknown='ignore'), cat_columns)])\n", "\n", - "# Удаление колонок\n", - "columns_to_drop = [] # Укажите столбцы, которые нужно удалить, если они есть\n", - "drop_columns = ColumnTransformer(\n", - " verbose_feature_names_out=False,\n", - " transformers=[\n", - " (\"drop_columns\", \"drop\", columns_to_drop),\n", - " ],\n", - " remainder=\"passthrough\",\n", - ")\n", + "# Создание конвейеров для моделей\n", + "pipeline_logistic_regression = Pipeline(steps=[\n", + " ('preprocessor', preprocessor),\n", + " ('classifier', LogisticRegression(random_state=42))])\n", "\n", - "# Основной конвейер предобработки данных и конструирования признаков\n", - "pipeline_end = Pipeline(\n", - " [\n", - " (\"features_preprocessing\", features_preprocessing),\n", - " (\"custom_features\", SalaryFeatures()),\n", - " (\"drop_columns\", drop_columns),\n", - " ]\n", - ")\n", + "pipeline_decision_tree = Pipeline(steps=[\n", + " ('preprocessor', preprocessor),\n", + " ('classifier', DecisionTreeClassifier(random_state=42))])\n", "\n", - "# Демонстрация работы конвейера для предобработки данных при классификации\n", - "preprocessing_result = pipeline_end.fit_transform(X_train)\n", + "pipeline_gradient_boosting = Pipeline(steps=[\n", + " ('preprocessor', preprocessor),\n", + " ('classifier', GradientBoostingClassifier(random_state=42))])\n", "\n", - "# Получение имен столбцов после преобразования\n", - "feature_names = pipeline_end.named_steps['features_preprocessing'].get_feature_names_out(numeric_columns + cat_columns)\n", - "feature_names = np.append(feature_names, [\"work_year_to_remote_ratio\"])\n", + "# Список конвейеров \n", + "pipelines = [\n", + " ('Logistic Regression', pipeline_logistic_regression),\n", + " ('Decision Tree', pipeline_decision_tree),\n", + " ('Gradient Boosting', pipeline_gradient_boosting)\n", + "]\n", "\n", - "# Создание DataFrame с преобразованными данными\n", - "preprocessed_df = pd.DataFrame(\n", - " preprocessing_result,\n", - " columns=feature_names,\n", - ")\n", - "\n", - "preprocessed_df" + "# Обучение моделей и вывод результатов\n", + "for name, pipeline in pipelines:\n", + " pipeline.fit(X_train, y_train)\n", + " y_pred = pipeline.predict(X_test)\n", + " accuracy = accuracy_score(y_test, y_pred)\n", + " f1 = f1_score(y_test, y_pred)\n", + " print(f\"Model: {name}\")\n", + " print(f\"Accuracy: {accuracy:.4f}\")\n", + " print(f\"F1 Score: {f1:.4f}\")\n", + " print(\"-\" * 40)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "**Бизнес-цели**\n", - "\n", - "1. Предсказание заработной платы (Регрессия)\n", - "\n", - " Цель: Предсказать заработную плату (salary_in_usd) на основе других характеристик, таких как уровень опыта (experience_level), тип занятости (employment_type), должность (job_title), место проживания сотрудника (employee_residence), размер компании (company_size) и другие факторы.\n", - "\n", - " Применение: Это может быть полезно для HR-отделов, которые хотят оценить справедливую зарплату для новых сотрудников или для анализа рынка труда.\n", - "\n", - "2. Классификация уровня опыта по зарплате (Классификация)\n", - "\n", - " Цель: Классифицировать уровень опыта (experience_level) на основе заработной платы (salary_in_usd) и других факторов.\n", - "\n", - " Применение: Это может помочь в оценке, на каком уровне опыта находится сотрудник, основываясь на его зарплате, что может быть полезно для оценки карьерного роста." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1. Прогнозирование зарплаты" + "Оценка качества моделей" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - " work_year experience_level employment_type job_title \\\n", - "0 2023 SE FT Principal Data Scientist \n", - "1 2023 MI CT ML Engineer \n", - "2 2023 MI CT ML Engineer \n", - "3 2023 SE FT Data Scientist \n", - "4 2023 SE FT Data Scientist \n", + "Model: Logistic Regression\n", + "Accuracy: 0.7523302263648469\n", + "F1 Score: 0.7517841210039291\n", "\n", - " salary salary_currency salary_in_usd employee_residence remote_ratio \\\n", - "0 80000 EUR 85847 ES 100 \n", - "1 30000 USD 30000 US 100 \n", - "2 25500 USD 25500 US 100 \n", - "3 175000 USD 175000 CA 100 \n", - "4 120000 USD 120000 CA 100 \n", + "Model: Decision Tree\n", + "Accuracy: 0.996005326231691\n", + "F1 Score: 0.9960048583691977\n", "\n", - " company_location company_size \n", - "0 ES L \n", - "1 US S \n", - "2 US S \n", - "3 CA M \n", - "4 CA M \n", - "\n", - "RangeIndex: 3755 entries, 0 to 3754\n", - "Data columns (total 11 columns):\n", - " # Column Non-Null Count Dtype \n", - "--- ------ -------------- ----- \n", - " 0 work_year 3755 non-null int64 \n", - " 1 experience_level 3755 non-null object\n", - " 2 employment_type 3755 non-null object\n", - " 3 job_title 3755 non-null object\n", - " 4 salary 3755 non-null int64 \n", - " 5 salary_currency 3755 non-null object\n", - " 6 salary_in_usd 3755 non-null int64 \n", - " 7 employee_residence 3755 non-null object\n", - " 8 remote_ratio 3755 non-null int64 \n", - " 9 company_location 3755 non-null object\n", - " 10 company_size 3755 non-null object\n", - "dtypes: int64(4), object(7)\n", - "memory usage: 322.8+ KB\n", - "None\n", - " work_year salary salary_in_usd remote_ratio\n", - "count 3755.000000 3.755000e+03 3755.000000 3755.000000\n", - "mean 2022.373635 1.906956e+05 137570.389880 46.271638\n", - "std 0.691448 6.716765e+05 63055.625278 48.589050\n", - "min 2020.000000 6.000000e+03 5132.000000 0.000000\n", - "25% 2022.000000 1.000000e+05 95000.000000 0.000000\n", - "50% 2022.000000 1.380000e+05 135000.000000 0.000000\n", - "75% 2023.000000 1.800000e+05 175000.000000 100.000000\n", - "max 2023.000000 3.040000e+07 450000.000000 100.000000\n", - "work_year 0\n", + "Model: Gradient Boosting\n", + "Accuracy: 0.9946737683089214\n", + "F1 Score: 0.9946728986768623\n", + "\n" + ] + } + ], + "source": [ + "from sklearn.metrics import accuracy_score, f1_score\n", + "\n", + "for name, pipeline in pipelines:\n", + " y_pred = pipeline.predict(X_test)\n", + " print(f\"Model: {name}\")\n", + " print('Accuracy:', accuracy_score(y_test, y_pred))\n", + " print('F1 Score:', f1_score(y_test, y_pred, average='weighted'))\n", + " print()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Регрессия\n", + "Цель: Разработать модель регрессии, которая будет предсказывать зарплату (salary_in_usd) на основе демографических данных, типа работы и других факторов." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Размер данных до удаления выбросов: (3755, 11)\n", + "Размер данных после удаления выбросов: (3708, 11)\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from scipy import stats\n", + "\n", + "# Загрузка данных\n", + "df = pd.read_csv(\"..//static//csv//ds_salaries.csv\")\n", + "\n", + "# Определение числовых признаков\n", + "numeric_features = ['work_year', 'salary', 'salary_in_usd', 'remote_ratio']\n", + "\n", + "# Вычисление z-оценок для числовых признаков\n", + "z_scores = stats.zscore(df[numeric_features])\n", + "\n", + "# Определение порога для удаления выбросов\n", + "threshold = 3\n", + "\n", + "# Удаление выбросов\n", + "df_cleaned = df[(z_scores < threshold).all(axis=1)]\n", + "\n", + "print(\"Размер данных до удаления выбросов:\", df.shape)\n", + "print(\"Размер данных после удаления выбросов:\", df_cleaned.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Размер обучающей выборки: (2966, 9)\n", + "Размер тестовой выборки: (742, 9)\n", + "Baseline MAE: 48988.97819674187\n", + "Baseline MSE: 3791583837.2779293\n", + "Baseline R²: -0.005051587587466155\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score\n", + "\n", + "# Определение признаков и целевой переменной\n", + "features = ['work_year', 'experience_level', 'employment_type', 'job_title', 'salary_currency', 'remote_ratio', 'employee_residence', 'company_location', 'company_size']\n", + "target = 'salary_in_usd'\n", + "\n", + "# Разделение данных на тренировочный и тестовый наборы\n", + "X_train, X_test, y_train, y_test = train_test_split(df_cleaned[features], df_cleaned[target], test_size=0.2, random_state=42)\n", + "\n", + "print(\"Размер обучающей выборки:\", X_train.shape)\n", + "print(\"Размер тестовой выборки:\", X_test.shape)\n", + "\n", + "# Создание ориентира (baseline)\n", + "baseline_predictions = [y_train.mean()] * len(y_test)\n", + "\n", + "# Вычисление метрик для ориентира\n", + "print('Baseline MAE:', mean_absolute_error(y_test, baseline_predictions))\n", + "print('Baseline MSE:', mean_squared_error(y_test, baseline_predictions))\n", + "print('Baseline R²:', r2_score(y_test, baseline_predictions))" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Размер данных до удаления выбросов: (3755, 11)\n", + "Размер данных после удаления выбросов: (3733, 11)\n", + "Размер обучающей выборки: (2986, 9)\n", + "Размер тестовой выборки: (747, 9)\n", + "Baseline MAE: 47593.92288600708\n", + "Baseline MSE: 3680965527.9964128\n", + "Baseline R²: -0.0016576422593919116\n", + "Model: Linear Regression trained.\n", + "Model: Decision Tree trained.\n", + "Model: Gradient Boosting trained.\n", + "Model: Linear Regression\n", + "MAE: 36617.65439873256\n", + "MSE: 2194684192.4416404\n", + "R²: 0.4027865306031213\n", + "\n", + "Model: Decision Tree\n", + "MAE: 36516.71804922624\n", + "MSE: 2246643776.062331\n", + "R²: 0.38864738324451775\n", + "\n", + "Model: Gradient Boosting\n", + "MAE: 35842.80843437428\n", + "MSE: 2125285552.2470944\n", + "R²: 0.42167116230764956\n", + "\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "from scipy import stats\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n", + "from sklearn.compose import ColumnTransformer\n", + "from sklearn.pipeline import Pipeline\n", + "from sklearn.linear_model import LinearRegression\n", + "from sklearn.tree import DecisionTreeRegressor\n", + "from sklearn.ensemble import GradientBoostingRegressor\n", + "from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score\n", + "\n", + "# Загрузка данных\n", + "df = pd.read_csv(\"..//static//csv//ds_salaries.csv\")\n", + "\n", + "# Определение числовых признаков\n", + "numeric_features = ['work_year', 'salary_in_usd', 'remote_ratio']\n", + "\n", + "# Вычисление z-оценок для числовых признаков\n", + "z_scores = stats.zscore(df[numeric_features])\n", + "\n", + "# Определение порога для удаления выбросов\n", + "threshold = 3\n", + "\n", + "# Удаление выбросов\n", + "df_cleaned = df[(z_scores < threshold).all(axis=1)]\n", + "\n", + "print(\"Размер данных до удаления выбросов:\", df.shape)\n", + "print(\"Размер данных после удаления выбросов:\", df_cleaned.shape)\n", + "\n", + "# Разделение на выборки и создание ориентира\n", + "features = ['work_year', 'experience_level', 'employment_type', 'job_title', 'salary_currency', 'remote_ratio', 'employee_residence', 'company_location', 'company_size']\n", + "target = 'salary_in_usd'\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(df_cleaned[features], df_cleaned[target], test_size=0.2, random_state=42)\n", + "\n", + "print(\"Размер обучающей выборки:\", X_train.shape)\n", + "print(\"Размер тестовой выборки:\", X_test.shape)\n", + "\n", + "# Создание ориентира (baseline)\n", + "baseline_predictions = [y_train.mean()] * len(y_test)\n", + "\n", + "print('Baseline MAE:', mean_absolute_error(y_test, baseline_predictions))\n", + "print('Baseline MSE:', mean_squared_error(y_test, baseline_predictions))\n", + "print('Baseline R²:', r2_score(y_test, baseline_predictions))\n", + "\n", + "# Создание конвейера и обучение моделей\n", + "categorical_features = ['experience_level', 'employment_type', 'job_title', 'salary_currency', 'employee_residence', 'company_location', 'company_size']\n", + "numeric_features = ['work_year', 'remote_ratio']\n", + "\n", + "preprocessor = ColumnTransformer(\n", + " transformers=[\n", + " ('num', StandardScaler(), numeric_features),\n", + " ('cat', OneHotEncoder(handle_unknown='ignore'), categorical_features)])\n", + "\n", + "pipeline_linear_regression = Pipeline(steps=[\n", + " ('preprocessor', preprocessor),\n", + " ('regressor', LinearRegression())])\n", + "\n", + "pipeline_decision_tree = Pipeline(steps=[\n", + " ('preprocessor', preprocessor),\n", + " ('regressor', DecisionTreeRegressor(random_state=42))])\n", + "\n", + "pipeline_gradient_boosting = Pipeline(steps=[\n", + " ('preprocessor', preprocessor),\n", + " ('regressor', GradientBoostingRegressor(random_state=42))])\n", + "\n", + "pipelines = [\n", + " ('Linear Regression', pipeline_linear_regression),\n", + " ('Decision Tree', pipeline_decision_tree),\n", + " ('Gradient Boosting', pipeline_gradient_boosting)\n", + "]\n", + "\n", + "for name, pipeline in pipelines:\n", + " pipeline.fit(X_train, y_train)\n", + " print(f\"Model: {name} trained.\")\n", + "\n", + "# Оценка качества моделей\n", + "for name, pipeline in pipelines:\n", + " y_pred = pipeline.predict(X_test)\n", + " print(f\"Model: {name}\")\n", + " print('MAE:', mean_absolute_error(y_test, y_pred))\n", + " print('MSE:', mean_squared_error(y_test, y_pred))\n", + " print('R²:', r2_score(y_test, y_pred))\n", + " print()" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model: Linear Regression\n", + "MAE: 36617.65439873256\n", + "MSE: 2194684192.4416404\n", + "R²: 0.4027865306031213\n", + "\n", + "Model: Decision Tree\n", + "MAE: 36516.71804922624\n", + "MSE: 2246643776.062331\n", + "R²: 0.38864738324451775\n", + "\n", + "Model: Gradient Boosting\n", + "MAE: 35842.80843437428\n", + "MSE: 2125285552.2470944\n", + "R²: 0.42167116230764956\n", + "\n" + ] + } + ], + "source": [ + "from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score\n", + "\n", + "for name, pipeline in pipelines:\n", + " y_pred = pipeline.predict(X_test)\n", + " print(f\"Model: {name}\")\n", + " print('MAE:', mean_absolute_error(y_test, y_pred))\n", + " print('MSE:', mean_squared_error(y_test, y_pred))\n", + " print('R²:', r2_score(y_test, y_pred))\n", + " print()" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Пропущенные значения:\n", + " work_year 0\n", "experience_level 0\n", "employment_type 0\n", "job_title 0\n", @@ -1474,115 +1722,124 @@ "remote_ratio 0\n", "company_location 0\n", "company_size 0\n", - "dtype: int64\n", - "Mean Squared Error: 2482079980.9527493\n", - "R^2 Score: 0.37127352660208646\n" + "dtype: int64\n" ] } ], "source": [ "import pandas as pd\n", - "import numpy as np\n", "from sklearn.model_selection import train_test_split\n", - "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n", + "from sklearn.preprocessing import OneHotEncoder, StandardScaler\n", "from sklearn.compose import ColumnTransformer\n", "from sklearn.pipeline import Pipeline\n", "from sklearn.linear_model import LinearRegression\n", + "from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor\n", "from sklearn.metrics import mean_squared_error, r2_score\n", - "import seaborn as sns\n", - "import matplotlib.pyplot as plt\n", + "from scipy.stats import uniform, randint\n", + "from sklearn.model_selection import RandomizedSearchCV\n", "\n", - "# Загружаем набор данных\n", + "# Загрузка данных\n", "df = pd.read_csv(\"..//static//csv//ds_salaries.csv\")\n", "\n", - "# Устанавливаем случайное состояние\n", - "random_state = 42\n", - "\n", - "# Предварительный анализ данных\n", - "print(df.head())\n", - "print(df.info())\n", - "print(df.describe())\n", - "\n", "# Проверка на пропущенные значения\n", - "print(df.isnull().sum())\n", + "print(\"Пропущенные значения:\\n\", df.isnull().sum())\n", "\n", - "# Предобработка данных\n", - "# Определяем категориальные и числовые столбцы\n", + "# Удаление строк с пропущенными значениями\n", + "df = df.dropna()\n", + "\n", + "# Выбор признаков и целевой переменной\n", + "features = ['work_year', 'experience_level', 'employment_type', 'job_title', 'employee_residence', 'remote_ratio', 'company_location', 'company_size']\n", + "target = 'salary_in_usd'\n", + "\n", + "# Определение категориальных и числовых признаков\n", "categorical_features = ['experience_level', 'employment_type', 'job_title', 'employee_residence', 'company_location', 'company_size']\n", "numeric_features = ['work_year', 'remote_ratio']\n", "\n", - "# Создаем пайплайн для обработки данных\n", + "# Создание пайплайна для обработки данных\n", + "categorical_transformer = Pipeline(steps=[\n", + " ('onehot', OneHotEncoder(handle_unknown='ignore'))\n", + "])\n", + "\n", + "numeric_transformer = Pipeline(steps=[\n", + " ('scaler', StandardScaler())\n", + "])\n", + "\n", "preprocessor = ColumnTransformer(\n", " transformers=[\n", - " ('num', StandardScaler(), numeric_features),\n", - " ('cat', OneHotEncoder(handle_unknown='ignore'), categorical_features)])\n", + " ('num', numeric_transformer, numeric_features),\n", + " ('cat', categorical_transformer, categorical_features)\n", + " ])\n", "\n", - "# Определяем целевую переменную и признаки\n", - "X = df.drop('salary_in_usd', axis=1)\n", - "y = df['salary_in_usd']\n", + "# Преобразование данных\n", + "X = preprocessor.fit_transform(df[features])\n", + "y = df[target]\n", "\n", - "# Разделяем данные на обучающую и тестовую выборки\n", - "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=random_state)\n", - "\n", - "# Создаем и обучаем модель\n", - "model = Pipeline(steps=[\n", - " ('preprocessor', preprocessor),\n", - " ('regressor', LinearRegression())])\n", - "\n", - "model.fit(X_train, y_train)\n", - "\n", - "# Делаем предсказания на тестовой выборке\n", - "y_pred = model.predict(X_test)\n", - "\n", - "# Оцениваем качество модели\n", - "mse = mean_squared_error(y_test, y_pred)\n", - "r2 = r2_score(y_test, y_pred)\n", - "\n", - "print(f\"Mean Squared Error: {mse}\")\n", - "print(f\"R^2 Score: {r2}\")\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "2. Классифицировать уровень опыта" + "# Разделение данных на обучающую и тестовую выборки\n", + "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 47, "metadata": {}, "outputs": [ { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - "Classification Report:\n", - " precision recall f1-score support\n", + "d:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\model_selection\\_search.py:320: UserWarning: The total space of parameters 4 is smaller than n_iter=10. Running 4 iterations. For exhaustive searches, use GridSearchCV.\n", + " warnings.warn(\n", + "d:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\model_selection\\_validation.py:540: FitFailedWarning: \n", + "6 fits failed out of a total of 12.\n", + "The score on these train-test partitions for these parameters will be set to nan.\n", + "If these failures are not expected, you can try to debug them by setting error_score='raise'.\n", "\n", - " EN 0.55 0.48 0.51 67\n", - " EX 0.46 0.26 0.33 23\n", - " MI 0.48 0.54 0.51 157\n", - " SE 0.83 0.83 0.83 504\n", + "Below are more details about the failures:\n", + "--------------------------------------------------------------------------------\n", + "6 fits failed with the following error:\n", + "Traceback (most recent call last):\n", + " File \"d:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\model_selection\\_validation.py\", line 888, in _fit_and_score\n", + " estimator.fit(X_train, y_train, **fit_params)\n", + " File \"d:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\base.py\", line 1473, in wrapper\n", + " return fit_method(estimator, *args, **kwargs)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"d:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\pipeline.py\", line 473, in fit\n", + " self._final_estimator.fit(Xt, y, **last_step_params[\"fit\"])\n", + " File \"d:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\base.py\", line 1473, in wrapper\n", + " return fit_method(estimator, *args, **kwargs)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"d:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\linear_model\\_base.py\", line 609, in fit\n", + " X, y = self._validate_data(\n", + " ^^^^^^^^^^^^^^^^^^^^\n", + " File \"d:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\base.py\", line 650, in _validate_data\n", + " X, y = check_X_y(X, y, **check_params)\n", + " ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"d:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\utils\\validation.py\", line 1301, in check_X_y\n", + " X = check_array(\n", + " ^^^^^^^^^^^^\n", + " File \"d:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\utils\\validation.py\", line 971, in check_array\n", + " array = _ensure_sparse_format(\n", + " ^^^^^^^^^^^^^^^^^^^^^^\n", + " File \"d:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\utils\\validation.py\", line 595, in _ensure_sparse_format\n", + " raise TypeError(\n", + "TypeError: Sparse data was passed for X, but dense data is required. Use '.toarray()' to convert to a dense numpy array.\n", "\n", - " accuracy 0.72 751\n", - " macro avg 0.58 0.53 0.55 751\n", - "weighted avg 0.72 0.72 0.72 751\n", - "\n", - "Confusion Matrix:\n", - "[[ 32 0 20 15]\n", - " [ 0 6 5 12]\n", - " [ 14 0 84 59]\n", - " [ 12 7 65 420]]\n", - "Accuracy Score: 0.7217043941411452\n" + " warnings.warn(some_fits_failed_message, FitFailedWarning)\n", + "d:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\model_selection\\_search.py:1103: UserWarning: One or more of the test scores are non-finite: [ nan 0.37308723 nan 0.37316524]\n", + " warnings.warn(\n", + "C:\\Users\\user\\AppData\\Local\\Temp\\ipykernel_14908\\2948510432.py:70: UserWarning: set_ticklabels() should only be used with a fixed number of ticks, i.e. after set_ticks() or using a FixedLocator.\n", + " axes[i].set_xticklabels(params.keys(), rotation=45, ha=\"right\") #Поворачиваем подписи на оси х\n", + "C:\\Users\\user\\AppData\\Local\\Temp\\ipykernel_14908\\2948510432.py:70: UserWarning: set_ticklabels() should only be used with a fixed number of ticks, i.e. after set_ticks() or using a FixedLocator.\n", + " axes[i].set_xticklabels(params.keys(), rotation=45, ha=\"right\") #Поворачиваем подписи на оси х\n", + "C:\\Users\\user\\AppData\\Local\\Temp\\ipykernel_14908\\2948510432.py:70: UserWarning: set_ticklabels() should only be used with a fixed number of ticks, i.e. after set_ticks() or using a FixedLocator.\n", + " axes[i].set_xticklabels(params.keys(), rotation=45, ha=\"right\") #Поворачиваем подписи на оси х\n" ] }, { "data": { - "image/png": "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", + "image/png": "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TL/99pvq1KmT5pc9yRwcHFSnTh3VqVNH//3vfzVmzBgNGTJEmzZtstbq7u6uli1bqmXLloqPj1eTJk00evRoDRo0KNXhDIUKFZJ090vZokWLWpfHx8crPDzc9H9PAfz70b0cQJaQlJSk/v37KykpSS1atMjweu3atdO1a9fUvXt33bhxw2Yc371y586tGjVqKCgoSEFBQTZ3AX5UFi5cqP3796e4G/e9WrRoobCwMP34448pXouKitKdO3ceWy0Z5ejoqKZNm2rp0qU6ePBgitdTm3Zpzpw51vG70t2Q++effz7UnYOTv0S59ypVfHy8Jk+enGr7O3fu6Msvv7Rp++WXX8rb29s693tq29yxY8cDewV07txZ+/fvV/PmzVPtSv0wxyqjvvjiC5vnn3/+uSQ98JgmXxXN7LzHS5YskZeXV4Z6hOzevVu///67dYxvelasWKFp06Zp+vTpql+//hMTmIKDg+Xh4aExY8akOvwk+WeX2rkjKUMzDzysYsWKqWnTppo1a5YiIiIydZ4FBwfr/PnzWr58uXXZ7du3053R4H4tWrTQ+fPnU13n1q1bunnzpqS73e7vlzwTQPLUYvdPq+bs7KzSpUvLMIw0h/0EBQXJ2dlZEydOtDnuM2bMUHR0tEJCQjK8LwCQGq50A/jX27Vrl7p06aIDBw6oa9eumer2XaFCBZUtW9Z6o5+MXGlLz759+2zCVGJios6fP681a9ZYl/3555+prrt27Vp17do13e7x/fr10/Lly9WgQQN17NhRFStW1M2bN3XgwAF98803On36tM0c4A8rI7VkxocffqhNmzapSpUq6tq1q0qXLq2rV69q7969Wr9+fYoP27lz59aLL76oTp06KTIyUhMmTFDx4sXTvHlTegIDA5UrVy516NBB7777riwWi+bOnZtmV1F/f3+NGzdOp0+f1lNPPaVFixZp3759mjZtmnVaoQYNGmjZsmV67bXXFBISovDwcE2dOlWlS5fWjRs30qylbt26unTpUrpjlzN7rDIqPDxcjRo1Ut26dRUWFqZ58+apTZs2KearP3v2rNasWWPtXj569GgVKlRIFSpUyNDV2MjISE2cOFFLlixRjRo1tHTpUpsaJCksLEzPPfecdWqozz77TEWLFlX79u3T3XZERIS6dOmiN954w2b6tczYsGFDqlO1NW7c2Gb6wMzy8PDQlClT1K5dOz333HNq1aqVvL29dfbsWf3www964YUXNGnSJHl4eKhGjRoaP368EhISlD9/fq1duzbNnhePSr9+/bR48WJNmDBBH374YYbPs+7du2vSpElq3bq1evXqpXz58unrr7+2XlF+0JVr6e6Xm4sXL9abb76pTZs26YUXXlBiYqKOHj2qxYsX68cff1SlSpU0cuRIbdmyRSEhISpUqJAuXryoyZMnq0CBAtb5yV955RX5+fnphRdekK+vr44cOaJJkyYpJCTE5uaL9/L29tagQYM0YsQI1a1bV40aNdKxY8c0efJkPf/882l+2QoAGfZY75UOAHYwb948IzAw0Jg9e7bNlD73Smt6KcMwjPHjxxuSjDFjxmT4PdOaMiyjj9SmDHNzczPOnz9v8z73T19kGHenJho0aJBRvHhxw9nZ2cibN68RGBhofPzxx9YprdKS0SnDMlJLZqYMMwzDiIyMNHr06GEEBAQY2bJlM/z8/Iw6deoY06ZNs7ZJPo4LFiwwBg0aZPj4+Bhubm5GSEiIcebMGZvtZWbKsK1btxpVq1Y13NzcDH9/f6N///7Gjz/+mOqUR2XKlDF2795tVKtWzXB1dTUKFSpkTJo0yeY9kpKSjDFjxhiFChUyXFxcjAoVKhgrV65MMXXXg6apSuv1jByre2VkyrDDhw8bzZo1M3LmzGnkypXL6Nmzp3Hr1i2btveeoxaLxfDz8zOaNGliHDlyxDCMjE0ZltHfheTzo0CBAkbnzp2NCxcupNjWvedcUlKSUbduXaNEiRLWKf3urTujU4al9Zg7d26K97x3n+8/z5P3897zJ3l5cHCw4enpabi6uhrFihUzOnbsaOzevdva5o8//jBee+01w8vLy/D09DSaN29uXLhwIcXvTfLPLr0ptFKr6f6pC5PVqlXL8PDwsE5zltHz7NSpU0ZISIjh5uZmeHt7G3379jWWLl1qSDK2b99ubZfev7Px8fHGuHHjjDJlyhguLi5Grly5jIoVKxojRowwoqOjDcMwjA0bNhivvvqq4e/vbzg7Oxv+/v5G69atbaZI/PLLL40aNWoYefLkMVxcXIxixYoZ/fr1s27DMNI+TydNmmSULFnSyJYtm+Hr62u89dZbxrVr12zapLUP6f2OAYDFMLjrAwCk57PPPtN7772n06dPp7hDMR6vzZs366WXXtKSJUvUrFmzx/7+tWrV0uXLl1PtcvtPFRoaqhEjRujSpUuPpBfEgyT/DNP7+NGxY0cVLlxYoaGhptcDc0yYMEHvvfee/vjjD+XPn9/e5QCAXTGmGwDSYRiGZsyYoZo1axK4ASAVt27dsnl++/ZtffnllypRogSBGwDEmG4ASNXNmze1fPlybdq0SQcOHND3339v75KAfwVfX1+1bds23TaBgYGP5ao7Ho0mTZqoYMGCKl++vKKjozVv3jwdPXpUX3/9tb1LA4AnAqEbAFJx6dIltWnTRl5eXho8eLAaNWpk75KAf4VSpUpp3rx56bbp1q3bY6oGj0JwcLCmT5+ur7/+WomJiSpdurQWLlyoli1b2rs0AHgiMKYbAAAAAACTMKYbAAAAAACTZMnu5UlJSbpw4YJy5syZofkjAQAAAAC4l2EYun79uvz9/eXgkPb17CwZui9cuKCAgAB7lwEAAAAA+Ic7d+6cChQokObrWTJ058yZU9Ldg+Ph4WHnagAAAAAA/zQxMTEKCAiw5su0ZMnQndyl3MPDg9ANAAAAAHhoDxqyzI3UAAAAAAAwCaEbAAAAAACTELoBAAAAADAJoRsAAAAAAJMQugEAAAAAMAmhGwAAAAAAkxC6AQAAAAAwCaEbAAAAAACTELoBAAAAADAJoRsAAAAAAJMQugEAAAAAMAmhGwAAAAAAkxC6AQAAAAAwCaEbAAAAAACTELoBAAAAADAJoRsAAAAAAJMQugEAAAAAMAmhGwAAAAAAkxC6AQAAAAAwCaEbAAAAAACTELoBAAAAADAJoRsAAAAAAJMQugEAAAAAMAmhGwAAAAAAkxC6AQAAAAAwCaEbAAAAAACTELoBAAAAADAJoRsAAAAAAJMQugEAAAAAMAmhGwAAAAAAkxC6AQAAAAAwCaEbAAAAAACTELoBAAAAADAJoRsAAAAAAJMQugEAAAAAMAmhGwAAAAAAkxC6AQAAAAAwCaEbAAAAAACTmB66v/jiCxUuXFiurq6qUqWKdu7cmW77JUuWqGTJknJ1ddUzzzyjVatWpdn2zTfflMVi0YQJEx5x1QAAAAAA/H2mhu5FixapT58+Gj58uPbu3atnn31WwcHBunjxYqrtt23bptatW6tLly769ddf1bhxYzVu3FgHDx5M0fbbb7/V9u3b5e/vb+YuAAAAAADw0CyGYRhmbbxKlSp6/vnnNWnSJElSUlKSAgIC9M4772jgwIEp2rds2VI3b97UypUrrcuqVq2q8uXLa+rUqdZl58+fV5UqVfTjjz8qJCREvXv3Vu/evdOsIy4uTnFxcdbnMTExCggIUHR0tDw8PB7BngIAAAAAspKYmBh5eno+MFeadqU7Pj5ee/bsUVBQ0F9v5uCgoKAghYWFpbpOWFiYTXtJCg4OtmmflJSkdu3aqV+/fipTpkyGahk7dqw8PT2tj4CAgIfYIwAAAAAAMse00H358mUlJibK19fXZrmvr68iIiJSXSciIuKB7ceNGycnJye9++67Ga5l0KBBio6Otj7OnTuXiT0BAAAAAODhONm7gMzYs2ePPvvsM+3du1cWiyXD67m4uMjFxcXEygAAAAAASMm0K9158+aVo6OjIiMjbZZHRkbKz88v1XX8/PzSbf/zzz/r4sWLKliwoJycnOTk5KQzZ86ob9++Kly4sCn7AQAAAADAwzItdDs7O6tixYrasGGDdVlSUpI2bNigatWqpbpOtWrVbNpL0rp166zt27Vrp/3792vfvn3Wh7+/v/r166cff/zRrF0BAAAAAOChmNq9vE+fPurQoYMqVaqkypUra8KECbp586Y6deokSWrfvr3y58+vsWPHSpJ69eqlmjVr6pNPPlFISIgWLlyo3bt3a9q0aZKkPHnyKE+ePDbvkS1bNvn5+enpp582c1cAAAAAAMg0U0N3y5YtdenSJQ0bNkwREREqX7681qxZY71Z2tmzZ+Xg8NfF9sDAQM2fP19Dhw7V4MGDVaJECX333XcqW7asmWUCAAAAAGAKU+fpflJldD41AAAAAABSY/d5ugEAAAAAyOoI3QAAAAAAmITQDQAAAACASQjdAAAAAACYhNANAAAAAIBJCN0AAAAAAJiE0A0AAAAAgEkI3QAAAAAAmITQDQAAAACASQjdAAAAAACYhNANAAAAAIBJCN0AAAAAAJiE0A0AAAAAgEkI3QAAAAAAmITQDQAAAACASQjdAAAAAACYhNANAAAAAIBJCN0AAAAAAJiE0A0AAAAAgEkI3QAAAAAAmITQDQAAAACASQjdAAAAAACYhNANAAAAAIBJCN0AAAAAAJiE0A0AAAAAgEkI3QAAAAAAmITQDQAAAACASQjdAAAAAACYhNANAAAAAIBJCN0AAAAAAJiE0A0AAAAAgEkI3QAAAAAAmITQDQAAAACASQjdAAAAAACYhNANAAAAAIBJCN0AAAAAAJiE0A0AAAAAgEkI3QAAAAAAmITQDQAAAACASQjdAAAAAACYhNANAAAAAIBJCN0AAAAAAJiE0A0AAAAAgEkI3QAAAAAAmITQDQAAAACASQjdAAAAAACYhNANAAAAAIBJCN0AAAAAAJjE9ND9xRdfqHDhwnJ1dVWVKlW0c+fOdNsvWbJEJUuWlKurq5555hmtWrXK+lpCQoIGDBigZ555Ru7u7vL391f79u114cIFs3cDAAAAAIBMMzV0L1q0SH369NHw4cO1d+9ePfvsswoODtbFixdTbb9t2za1bt1aXbp00a+//qrGjRurcePGOnjwoCQpNjZWe/fu1fvvv6+9e/dq2bJlOnbsmBo1amTmbgAAAAAA8FAshmEYZm28SpUqev755zVp0iRJUlJSkgICAvTOO+9o4MCBKdq3bNlSN2/e1MqVK63LqlatqvLly2vq1KmpvseuXbtUuXJlnTlzRgULFky1TVxcnOLi4qzPY2JiFBAQoOjoaHl4ePydXQQAAAAAZEExMTHy9PR8YK407Up3fHy89uzZo6CgoL/ezMFBQUFBCgsLS3WdsLAwm/aSFBwcnGZ7SYqOjpbFYpGXl1eabcaOHStPT0/rIyAgIHM7AwAAAADAQzAtdF++fFmJiYny9fW1We7r66uIiIhU14mIiMhU+9u3b2vAgAFq3bp1ut8sDBo0SNHR0dbHuXPnMrk3AAAAAABknpO9C3hYCQkJatGihQzD0JQpU9Jt6+LiIhcXl8dUGQAAAAAAd5kWuvPmzStHR0dFRkbaLI+MjJSfn1+q6/j5+WWofXLgPnPmjDZu3Mi4bAAAAADAE8m07uXOzs6qWLGiNmzYYF2WlJSkDRs2qFq1aqmuU61aNZv2krRu3Tqb9smB+8SJE1q/fr3y5Mljzg4AAAAAAPA3mdq9vE+fPurQoYMqVaqkypUra8KECbp586Y6deokSWrfvr3y58+vsWPHSpJ69eqlmjVr6pNPPlFISIgWLlyo3bt3a9q0aZLuBu5mzZpp7969WrlypRITE63jvXPnzi1nZ2czdwcAAAAAgEwxNXS3bNlSly5d0rBhwxQREaHy5ctrzZo11pulnT17Vg4Of11sDwwM1Pz58zV06FANHjxYJUqU0HfffaeyZctKks6fP6/ly5dLksqXL2/zXps2bVKtWrXM3B0AAAAAADLF1Hm6n1QZnU8NAAAAAIDU2H2ebgAAAAAAsjpCNwAAAAAAJiF0AwAAAABgEkI3AAAAAAAmIXQDAAAAAGASQjcAAAAAACYhdAMAAAAAYBJCNwAAAAAAJiF0AwAAAABgEkI3AAAAAAAmIXQDAAAAAGASQjcAAAAAACYhdAMAAAAAYBJCNwAAAAAAJiF0AwAAAABgEkI3AAAAAAAmIXQDAAAAAGASQjcAAAAAACYhdAMAAAAAYBJCNwAAAAAAJiF0AwAAAABgEkI3AAAAAAAmIXQDAAAAAGASQjcAAAAAACYhdAMAAAAAYBJCNwAAAAAAJiF0AwAAAABgEkI3AAAAAAAmIXQDAAAAAGASQjcAAAAAACYhdAMAAAAAYBJCNwAAAAAAJiF0AwAAAABgEkI3AAAAAAAmIXQDAAAAAGASQjcAAAAAACYhdAMAAAAAYBJCNwAAAAAAJiF0AwAAAABgEkI3AAAAAAAmIXQDAAAAAGASQjcAAAAAACYhdAMAAAAAYBJCNwAAAAAAJiF0AwAAAABgEkI3AAAAAAAmIXQDAAAAAGAS00P3F198ocKFC8vV1VVVqlTRzp07022/ZMkSlSxZUq6urnrmmWe0atUqm9cNw9CwYcOUL18+ubm5KSgoSCdOnDBzFwAAAAAAeCimhu5FixapT58+Gj58uPbu3atnn31WwcHBunjxYqrtt23bptatW6tLly769ddf1bhxYzVu3FgHDx60thk/frwmTpyoqVOnaseOHXJ3d1dwcLBu375t5q4AAAAAAJBpFsMwDLM2XqVKFT3//POaNGmSJCkpKUkBAQF65513NHDgwBTtW7ZsqZs3b2rlypXWZVWrVlX58uU1depUGYYhf39/9e3bV//5z38kSdHR0fL19dWsWbPUqlWrDNUVExMjT09PRUdHy8PD4xHsKQAAAAAgK8lorjTtSnd8fLz27NmjoKCgv97MwUFBQUEKCwtLdZ2wsDCb9pIUHBxsbR8eHq6IiAibNp6enqpSpUqa25SkuLg4xcTE2DwAAAAAADCbaaH78uXLSkxMlK+vr81yX19fRUREpLpOREREuu2T/5uZbUrS2LFj5enpaX0EBARken8AAAAAAMisLHH38kGDBik6Otr6OHfunL1LAgAAAABkAaaF7rx588rR0VGRkZE2yyMjI+Xn55fqOn5+fum2T/5vZrYpSS4uLvLw8LB5AAAAAABgNtNCt7OzsypWrKgNGzZYlyUlJWnDhg2qVq1aqutUq1bNpr0krVu3ztq+SJEi8vPzs2kTExOjHTt2pLlNAAAAAADsxcnMjffp00cdOnRQpUqVVLlyZU2YMEE3b95Up06dJEnt27dX/vz5NXbsWElSr169VLNmTX3yyScKCQnRwoULtXv3bk2bNk2SZLFY1Lt3b33wwQcqUaKEihQpovfff1/+/v5q3LixmbsCAAAAAECmmRq6W7ZsqUuXLmnYsGGKiIhQ+fLltWbNGuuN0M6ePSsHh78utgcGBmr+/PkaOnSoBg8erBIlSui7775T2bJlrW369++vmzdvqlu3boqKitKLL76oNWvWyNXV1cxdAQAAAAAg00ydp/tJxTzdAAAAAIC/w+7zdAMAAAAAkNURugEAAAAAMAmhGwAAAAAAkxC6AQAAAAAwCaEbAAAAAACTELoBAAAAADAJoRsAAAAAAJMQugEAAAAAMAmhGwAAAAAAkxC6AQAAAAAwCaEbAAAAAACTELoBAAAAADAJoRsAAAAAAJMQugEAAAAAMAmhGwAAAAAAkxC6AQAAAAAwCaEbAAAAAACTELoBAAAAADAJoRsAAAAAAJMQugEAAAAAMAmhGwAAAAAAkxC6AQAAAAAwCaEbAAAAAACTELoBAAAAADAJoRsAAAAAAJMQugEAAAAAMAmhGwAAAAAAkxC6AQAAAAAwCaEbAAAAAACTELoBAAAAADAJoRsAAAAAAJMQugEAAAAAMAmhGwAAAAAAkxC6AQAAAAAwCaEbAAAAAACTELoBAAAAADAJoRsAAAAAAJMQugEAAAAAMAmhGwAAAAAAkxC6AQAAAAAwCaEbAAAAAACTELoBAAAAADAJoRsAAAAAAJMQugEAAAAAMAmhGwAAAAAAkxC6AQAAAAAwCaEbAAAAAACTELoBAAAAADCJaaH76tWratu2rTw8POTl5aUuXbroxo0b6a5z+/Zt9ejRQ3ny5FGOHDnUtGlTRUZGWl//7bff1Lp1awUEBMjNzU2lSpXSZ599ZtYuAAAAAADwt5gWutu2batDhw5p3bp1WrlypbZs2aJu3bqlu857772nFStWaMmSJfrpp5904cIFNWnSxPr6nj175OPjo3nz5unQoUMaMmSIBg0apEmTJpm1GwAAAAAAPDSLYRjGo97okSNHVLp0ae3atUuVKlWSJK1Zs0b169fXH3/8IX9//xTrREdHy9vbW/Pnz1ezZs0kSUePHlWpUqUUFhamqlWrpvpePXr00JEjR7Rx48YM1xcTEyNPT09FR0fLw8PjIfYQAAAAAJCVZTRXmnKlOywsTF5eXtbALUlBQUFycHDQjh07Ul1nz549SkhIUFBQkHVZyZIlVbBgQYWFhaX5XtHR0cqdO3e69cTFxSkmJsbmAQAAAACA2UwJ3REREfLx8bFZ5uTkpNy5cysiIiLNdZydneXl5WWz3NfXN811tm3bpkWLFj2w2/rYsWPl6elpfQQEBGR8ZwAAAAAAeEiZCt0DBw6UxWJJ93H06FGzarVx8OBBvfrqqxo+fLheeeWVdNsOGjRI0dHR1se5c+ceS40AAAAAgKzNKTON+/btq44dO6bbpmjRovLz89PFixdtlt+5c0dXr16Vn59fquv5+fkpPj5eUVFRNle7IyMjU6xz+PBh1alTR926ddPQoUMfWLeLi4tcXFwe2A4AAAAAgEcpU6Hb29tb3t7eD2xXrVo1RUVFac+ePapYsaIkaePGjUpKSlKVKlVSXadixYrKli2bNmzYoKZNm0qSjh07prNnz6patWrWdocOHVLt2rXVoUMHjR49OjPlAwAAAADwWJly93JJqlevniIjIzV16lQlJCSoU6dOqlSpkubPny9JOn/+vOrUqaM5c+aocuXKkqS33npLq1at0qxZs+Th4aF33nlH0t2x29LdLuW1a9dWcHCwPvroI+t7OTo6ZujLgGTcvRwAAAAA8HdkNFdm6kp3Znz99dfq2bOn6tSpIwcHBzVt2lQTJ060vp6QkKBjx44pNjbWuuzTTz+1to2Li1NwcLAmT55sff2bb77RpUuXNG/ePM2bN8+6vFChQjp9+rRZuwIAAAAAwEMx7Ur3k4wr3QAAAACAv8Ou83QDAAAAAABCNwAAAAAApiF0AwAAAABgEkI3AAAAAAAmIXQDAAAAAGASQjcAAAAAACYhdAMAAAAAYBJCNwAAAAAAJiF0AwAAAABgEkI3AAAAAAAmIXQDAAAAAGASQjcAAAAAACYhdAMAAAAAYBJCNwAAAAAAJiF0AwAAAABgEkI3AAAAAAAmIXQDAAAAAGASQjcAAAAAACYhdAMAAAAAYBJCNwAAAAAAJiF0AwAAAABgEkI3AAAAAAAmIXQDAAAAAGASQjcAAAAAACYhdAMAAAAAYBJCNwAAAAAAJiF0AwAAAABgEkI3AAAAAAAmIXQDAAAAAGASQjcAAAAAACYhdAMAAAAAYBJCNwAAAAAAJiF0AwAAAABgEkI3AAAAAAAmIXQDAAAAAGASQjcAAAAAACYhdAMAAAAAYBJCNwAAAAAAJiF0AwAAAABgEkI3AAAAAAAmIXQDAAAAAGASQjcAAAAAACYhdAMAAAAAYBJCNwAAAAAAJiF0AwAAAABgEkI3AAAAAAAmIXQDAAAAAGASQjcAAAAAACYxLXRfvXpVbdu2lYeHh7y8vNSlSxfduHEj3XVu376tHj16KE+ePMqRI4eaNm2qyMjIVNteuXJFBQoUkMViUVRUlAl7AAAAAADA32Na6G7btq0OHTqkdevWaeXKldqyZYu6deuW7jrvvfeeVqxYoSVLluinn37ShQsX1KRJk1TbdunSReXKlTOjdAAAAAAAHgmLYRjGo97okSNHVLp0ae3atUuVKlWSJK1Zs0b169fXH3/8IX9//xTrREdHy9vbW/Pnz1ezZs0kSUePHlWpUqUUFhamqlWrWttOmTJFixYt0rBhw1SnTh1du3ZNXl5eadYTFxenuLg46/OYmBgFBAQoOjpaHh4ej2ivAQAAAABZRUxMjDw9PR+YK0250h0WFiYvLy9r4JakoKAgOTg4aMeOHamus2fPHiUkJCgoKMi6rGTJkipYsKDCwsKsyw4fPqyRI0dqzpw5cnDIWPljx46Vp6en9REQEPCQewYAAAAAQMaZErojIiLk4+Njs8zJyUm5c+dWREREmus4OzunuGLt6+trXScuLk6tW7fWRx99pIIFC2a4nkGDBik6Otr6OHfuXOZ2CAAAAACAh5Cp0D1w4EBZLJZ0H0ePHjWrVg0aNEilSpXS66+/nqn1XFxc5OHhYfMAAAAAAMBsTplp3LdvX3Xs2DHdNkWLFpWfn58uXrxos/zOnTu6evWq/Pz8Ul3Pz89P8fHxioqKsrnaHRkZaV1n48aNOnDggL755htJUvJw9Lx582rIkCEaMWJEZnYHAAAAAABTZSp0e3t7y9vb+4HtqlWrpqioKO3Zs0cVK1aUdDcwJyUlqUqVKqmuU7FiRWXLlk0bNmxQ06ZNJUnHjh3T2bNnVa1aNUnS0qVLdevWLes6u3btUufOnfXzzz+rWLFimdkVAAAAAABMl6nQnVGlSpVS3bp11bVrV02dOlUJCQnq2bOnWrVqZb1z+fnz51WnTh3NmTNHlStXlqenp7p06aI+ffood+7c8vDw0DvvvKNq1apZ71x+f7C+fPmy9f3Su3s5AAAAAAD2YErolqSvv/5aPXv2VJ06deTg4KCmTZtq4sSJ1tcTEhJ07NgxxcbGWpd9+umn1rZxcXEKDg7W5MmTzSoRAAAAAABTmTJP95Muo/OpAQAAAACQGrvO0w0AAAAAAAjdAAAAAACYhtANAAAAAIBJCN0AAAAAAJiE0A0AAAAAgEkI3QAAAAAAmITQDQAAAACASQjdAAAAAACYhNANAAAAAIBJCN0AAAAAAJiE0A0AAAAAgEkI3QAAAAAAmITQDQAAAACASQjdAAAAAACYhNANAAAAAIBJCN0AAAAAAJiE0A0AAAAAgEkI3QAAAAAAmITQDQAAAACASQjdAAAAAACYhNANAAAAAIBJCN0AAAAAAJiE0A0AAAAAgEkI3QAAAAAAmITQDQAAAACASQjdAAAAAACYhNANAAAAAIBJCN0AAAAAAJiE0A0AAAAAgEkI3QAAAAAAmITQDQAAAACASQjdAAAAAACYhNANAAAAAIBJCN0AAAAAAJiE0A0AAAAAgEmc7F2APRiGIUmKiYmxcyUAAAAAgH+i5DyZnC/TkiVD9/Xr1yVJAQEBdq4EAAAAAPBPdv36dXl6eqb5usV4UCz/F0pKStKFCxeUM2dOWSwWe5cDZFkxMTEKCAjQuXPn5OHhYe9yAAD4R+DvJ/BkMAxD169fl7+/vxwc0h65nSWvdDs4OKhAgQL2LgPA//Pw8OBDAwAAmcTfT8D+0rvCnYwbqQEAAAAAYBJCNwAAAAAAJiF0A7AbFxcXDR8+XC4uLvYuBQCAfwz+fgL/LFnyRmoAAAAAADwOXOkGAAAAAMAkhG4AAAAAAExC6AYAAAAAwCSEbgAAAAAATELoBgAAAADAJIRuAAAAAABMQugGAAAAnjCGYYiZfYF/B0I3AAAA8ISIj4+XJFksFl28eNHO1QB4FJzsXQCAfyfDMGSxWHT48GG5ubnp9u3bKlWqlL3LAgDgiXXnzh0tW7ZMFotFBQsW1LBhw7RgwQLlyZNHFovF3uUBeEiEbgCmsFgsWrlypUaMGKFatWpp48aN+u9//6uaNWvauzQAAJ5IDg4OKlOmjOrVqycnJyctX75cefPmVWJiohwdHe1dHoCHRPdyAKbYtWuXPvjgA61atUq+vr5ydXVVmTJllJSUZO/SAAB4Ijk4OMjT01MODg5ycXHRL7/8IkkEbuAfjtAN4JFKDtXh4eHq2rWrtm/frsWLF2vu3LnKmzev1q1bpwsXLti5SgAAnhzJN0y7c+eOChYsqFOnTmnmzJmaNWuWPvzwQ0nSvn379PPPP9uzTAAPidAN4JE6cuSIJClHjhzWDwuLFi1S0aJFtWHDBo0cOVK3bt2yc5UAADw5kodkNW/eXA0bNtScOXNUrVo1vf/++5o7d646dOigdu3aKS4uzt6lAngIjOkG8Mjcvn1bjRs3VmhoqOrWrSsHBweVL19eZ8+e1e+//66+fftq1KhRKlasmL1LBQDgibFnzx6NHj1aPXr00J07d9SvXz/FxMSod+/eypcvn2bNmqUJEyaoTp069i4VwEOwGEwACOARmjhxom7cuKHBgwfr0KFD+uSTTxQdHS0nJye1b99eISEh1jubAwCQ1e3bt09du3bVf/7zH7Vs2VKStHPnTr388stau3atqlSpYm3L30/gn4kr3QD+tqioKHl6espisah06dLq3Lmz6tWrpwoVKuiLL76Qm5ubrl+/rpw5c/KBAQCA/2cYhqKionT+/HnNnz/fGrorV66sZs2aKTEx0aY9fz+BfybGdAPItDNnzuiLL76QJB0+fFg9e/ZU165ddenSJQUFBendd9/VrFmzdOvWLTk7O0u6O8Zb4gMDACBrS+5keuPGDd26dUu1atXSwoULdf78efXt21dJSUnatWuX1q5da/0bCuCfje7lADJt9+7dslgsKly4sPLkyaPNmzdr5syZOnbsmF566SXFxsYqJiZG//vf/+TkRIcaAACkv7qHr1y5UpMmTVJcXJxeeOEFDRw4UHv27FHHjh2VI0cOVaxYUe3bt1ft2rXtXTKAR4DQDSDD7u0aHhsbq1deeUUvvPCCxo0bJ0lauXKlLly4oGHDhunixYvavXu3nnvuOXuWDADAE2Xt2rUaPHiwFi1apC+//FI//vijdu7cKRcXF/30008aM2aMihYtqilTpkhiHDfwb0DoBpAht27d0tmzZ/X000/rwIEDunTpkhITEzV69GhVrlxZ48ePt7Y9deqUbt68qWeeecaOFQMA8OQZN26cGjdurFOnTmnUqFGaP3++ChcurOPHj+upp57Sli1b9Pbbb6tZs2YKDQ21d7kAHgH6fQLIkAMHDmjVqlW6efOmVq1apZUrV6pIkSLKli2b3n//fQ0dOlQffPCBJKlo0aLW9fiGHgCQlSX/HUz+b2xsrNq2bStnZ2d988038vf31+rVqzVp0iTNnz9fVatW1ZdffqkCBQrYu3QAjwg3UgOQrosXLyoyMlKVK1fWqVOnNHHiRDVv3lxFihSRJFWtWlUffPCBVq9erX79+qVYn8ANAMiqkoP2qlWr9PHHH+vOnTuqX7++XFxcVK9ePfn7++unn37SgAED9NZbb8nT01POzs564YUXVKhQIXuXD+ARoXs5gDTFx8frvffe07vvvqunnnpK33//vdatW6eEhATVqlVLr776qtzd3RUREaEjR44oe/bsNvOJAgCQ1a1atUqDBg3S+PHjFRwcrJiYGM2fP18LFy5UUlKSbt++rWHDhqlBgwb0DgP+pQjdANJ18+ZNXbx4UVOnTtWbb76pIkWKKDQ0VCdPnlTz5s3l7u6uH374QYMGDZKPj4+9ywUA4IlgGIZiYmLUvHlzjRw5UlWrVlVCQoKyZcumuLg43blzR5GRkXJxcVH+/PkJ3MC/GN3LAaQq+fs4Nzc3JSQk6Oeff9bkyZMVERGhoUOHqkSJElqyZIk6duyo2rVrE7gBANBffz//+OMPeXp66sqVK3JwsP3IfeLECWXLlk1FixZV/vz5JTEcC/g3I3QDSCH52/a1a9dqypQpeuqppzRjxgz99ttvGjdunK5evaphw4Zp/Pjx2rx5sxo2bCg6zQAAcDc8//jjj6pWrZrOnDmjatWqadOmTfrjjz+ULVs2bd26Vc2bN9epU6fsXSqAx4TQDSAFi8WiH374Qb1791bZsmUlSaVKldLUqVN14sQJDR8+XKdOnZK/v7+KFy9uXQcAgKzu6NGjmjt3rhYvXqxChQqpevXqOnbsmFq3bq3Q0FC98cYb+vjjj1WyZEl7lwrgMWFMN4AUzp8/r5CQEM2cOVMVKlTQhg0btG3bNtWpU0cFChRQp06d9MUXX/CBAQCA/5eUlKQbN27o7bff1k8//aQxY8aoXbt2ku5Ou7l//34lJCSoRIkSeuGFFxjDDWQhhG4AVskfAMLDw/X222+rbt262r9/v+Li4uTg4CDDMDR37lzduHFDOXLksHe5AADY3f3hOTw8XKGhofL09FTbtm2Z1QMA3csB/HXTl6tXr8owDBUpUkT16tXTb7/9pubNm2vevHl6/fXXdfHiRd24cUPZs2e3c8UAANhfcuBev369+vTpo3HjxunKlSsaMWKEoqOjtXTpUoWFhdm7TAB2xpVuAJKkNWvW6OOPP5aXl5fc3Nz02WefKXfu3JKkbdu26d1331VoaKgaNGhg50oBAHhyrF69WkOGDNGgQYM0adIk+fj4aMmSJdq/f79GjRql/Pnza8SIEfL09LR3qQDsxMneBQCwv7CwML3zzjuaNm2aDMPQt99+qzp16mj9+vX6888/9d5772n48OFq0KABY9AAANDdq9yXL1/WjBkztHz5ch07dkxxcXH673//K0kqU6aMRowYoYSEBAI3kMVxpRuAJk2apHPnzmncuHFKSkpSfHy82rZtq+bNm6tVq1YKDw9XkSJFCNwAgCwtKSnJOuf2nTt35ODgoA8++EDXr1/Xli1btHDhQhUpUkQ//PCDzp07pzfffNPOFQN4EjCmG4Dy5MmjHTt26Pjx43JwcJCrq6u8vb1148YNSVKRIkUkMS0YACDrio2N1Q8//CBJWrVqlT788ENdvnxZp06d0vfff6/p06erSJEiCgsLU58+faxTagIAV7qBLCb5avWxY8dksViUM2dOOTk5acCAASpatKhq1qypvHnzqnXr1po8ebICAwPtXTIAAHZnGIZ69Oihbdu2KS4uTlOmTFGtWrW0f/9+de7cWaVKlVK2bNm0a9cujR07lnugALAidANZSHLgXrNmjbp3767nn39eP//8sxYuXChJWr58uX755Rd5enqqR48eeu211+xcMQAA9pf89/PAgQOqW7euihQpok2bNkmSsmXLpt9//12//fabEhMTVaRIEVWqVIkhWQCsCN1AFrNr1y5NnDhR3bp1U/Xq1TV9+nQNHTpUq1at0nPPPaerV68qMTFR3t7efGAAAGR59/4tvHbtmi5duqS+fftKuntPlEKFCikyMlIuLi7y8vKyY6UAnlSEbiALiYyMVMOGDeXm5qaffvrJekOYQYMG6cyZM5o7d64cHR3tXSYAAE+UjRs3au/evfL391ebNm2UlJSk+vXry9XVVQ0bNtTo0aO1fPlylS1b1t6lAngCcSM1IAtxd3fXW2+9pUOHDmnatGnWO7AWL15cHh4eBG4AAHT36nby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Vq1apU8//TTFOZPWjRuTe9GYKa33tmdN97t/3Hry8fvoo49S3P8gWfIXMC1atFD16tX17bffau3atfroo480btw4LVu2TPXq1TO1bgBZF6EbANJw+fJlHTp0SG+++WaG2js6OqpNmzaaNWuWxo0bp++++05du3ZN8WH1jTfeUJMmTXTw4EHrjdruvxHZo2AYhgYOHKjXXntNVatWTbVNsWLFdOPGDZsvBsyQkVoyytvbWzlz5lRiYmKG674/4BmGoZMnTz5U4Ny8ebOuXLmiZcuWqUaNGtbl4eHhqba/cOGCbt68aXO1+/jx45JkDZDffPONihYtqmXLltmE1+HDh6dZR548edSoUSNrV/UWLVqkuEr7MMcqo06cOGFzxfHkyZOphuICBQrYvHeOHDnUtm1b/frrr5l6v+Sr48lB9kEOHz6s55577oHt/vOf/+jEiRNaunSp5syZI2dnZ7388suZqu1eQ4YM0f/+9z8NHTpUa9askSStWLFCcXFxWr58uc1V7PvvTp8ZhQoVSvWLi2PHjqVol7y8aNGi1uXx8fEKDw83/Xc/IwoVKpSibknWoRrJ+5CWYsWKSZI8PDwytD/58uXT22+/rbffflsXL17Uc889p9GjR1tDd1pfIAHAw6J7OQCkIikpSf3791dSUpJatGiR4fXatWuna9euqXv37rpx40aa89Lmzp1bNWrUSNHN8lFauHCh9u/fn+Ju3Pdq0aKFwsLC9OOPP6Z4LSoqSnfu3HlstWSUo6OjmjZtqqVLl+rgwYMpXr906VKKZXPmzLGO35Xuhtw///zzoa5sJX+Jcu8Vvvj4+DTnZL5z546+/PJLm7ZffvmlvL29rXO/p7bNHTt2PLBXQOfOnbV//341b9481a7UD3OsMuqLL76wef75559L0gOPafJVyQdNw3e/JUuWyMvLK0M9Qnbv3q3ff/9dtWvXfmDbFStWaNq0aZo+fbrq16//t0Ool5eXunfvrh9//FH79u2TlPrPNzo62jo84GHUr19f27dv186dO63LLl26pK+//tqmXVBQkJydnTVx4kSb958xY4aio6MVEhLy0DU8KvXr19fOnTttzvebN29q2rRpKly48AN7IVSsWFHFihXTxx9/rBs3bqR4Pfk8T0xMTNGV38fHR/7+/oqLi7Muc3d3T3NYBwA8DK50A8B9du3apS5duujAgQPq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FqpcubLMZrNKly6tevXqad26dfr888/18ccfK1WqVI4uEw7ERFm8EWfOnFGDBg1Uo0YN5cuXT3Fxcfrggw909uxZVahQQXXr1lXlypWVN29eSU8W/AEcLTw8XAMGDNDWrVuVP39+SVL+/PmtC/09fPhQCRMmVObMmSUxVAyOExERoe7du2vmzJm6ffu2JMnX11fjxo1T3759FRoaqgwZMmjDhg0aMWKEbt68aX0s5y0c6ekBly4uLtq6dat2795t3Urps88+U4YMGXT8+HFJYlswONzDhw+te8KfPn1at2/flq+vr7Zu3aorV67IxcVFPj4+Sp06tfU8JnCD0A27ePTokXUxiYsXLyoiIkKZMmXS5MmT9eDBA7m6uipBggQ6ceKEAgICtH79euuiEoCz8PHxUe/eveXh4aH//e9/1uMuLi5yd3fn4hCcho+Pj3LkyKEDBw5o4cKFevDggT744AOdPHlSLVq0kI+Pj/bv368ePXqoadOmBBc4Bcsoi82bN2vVqlUqXry4li1bpsOHD2vSpEk6dOiQfvvtN+3fv19Zs2aVJBZWhUOZzWZt27ZNixcv1pgxY9S6dWs9ePBABQoU0Pvvv68FCxboxIkTOn36tA4fPqz06dM7umQ4CeZ047WLjY3V+vXrFR0drfv372vlypXWOS59+vRReHi45s+fz9BxOB3LB8AdO3bo+vXrkqR69epp586d6t69u5InT64WLVpo3Lhx6tatm2rVquXgigHb4eHfffedtm7dqnLlyqldu3aaM2eOFixYoKioKJlMJnXp0oVVc+FUVq1apa5du2rq1KkqXbq0pCfrETRv3lze3t4qUaKEKlSooGrVqnHewimcO3dOTZo00alTpzR06FC1bdtWkvTTTz9p27Zt+vXXX+Xl5aXu3burZs2aDq4WzoLQDbvYuHGjevXqpbCwMI0ePVp169aV2WzW2bNnNXToUJ07d04rVqwgeMPprF69Wr169VLfvn3VqFEjTZo0SS1bttS+ffvUpk0bJU6cWDNnzlTu3LkVGxurBAlYGgOO9/TWit999522bNmi8uXLq23btoqIiNDjx48VGxur1KlTE1zgNM6cOaPq1atryZIl+uCDD7R//36dPn1an332ma5fv66aNWuqdevW6tu3r6NLBWz07t1bv/32m4oVK6YKFSqoSJEikqRbt27JxcVFMTEx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", "text/plain": [ - "
" + "
" ] }, "metadata": {}, @@ -1592,328 +1849,78 @@ "source": [ "import pandas as pd\n", "import numpy as np\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n", - "from sklearn.compose import ColumnTransformer\n", - "from sklearn.pipeline import Pipeline\n", - "from sklearn.ensemble import RandomForestClassifier\n", - "from sklearn.metrics import classification_report, confusion_matrix, accuracy_score\n", - "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", - "\n", - "\n", - "# Загружаем набор данных\n", - "df = pd.read_csv(\"..//static//csv//ds_salaries.csv\")\n", - "\n", - "# Устанавливаем случайное состояние\n", - "random_state = 42\n", - "\n", - "\n", - "# Предобработка данных\n", - "# Определяем категориальные и числовые столбцы\n", - "categorical_features = ['employment_type', 'job_title', 'employee_residence', 'company_location', 'company_size']\n", - "numeric_features = ['work_year', 'salary_in_usd', 'remote_ratio']\n", - "\n", - "# Создаем пайплайн для обработки данных\n", - "preprocessor = ColumnTransformer(\n", - " transformers=[\n", - " ('num', StandardScaler(), numeric_features),\n", - " ('cat', OneHotEncoder(handle_unknown='ignore'), categorical_features)])\n", - "\n", - "# Определяем целевую переменную и признаки\n", - "X = df.drop('experience_level', axis=1)\n", - "y = df['experience_level']\n", - "\n", - "# Разделяем данные на обучающую и тестовую выборки\n", - "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=random_state)\n", - "\n", - "# Создаем и обучаем модель\n", - "model = Pipeline(steps=[\n", - " ('preprocessor', preprocessor),\n", - " ('classifier', RandomForestClassifier(random_state=random_state))])\n", - "\n", - "model.fit(X_train, y_train)\n", - "\n", - "# Делаем предсказания на тестовой выборке\n", - "y_pred = model.predict(X_test)\n", - "\n", - "# Оцениваем качество модели\n", - "print(\"Classification Report:\")\n", - "print(classification_report(y_test, y_pred))\n", - "\n", - "print(\"Confusion Matrix:\")\n", - "print(confusion_matrix(y_test, y_pred))\n", - "\n", - "print(f\"Accuracy Score: {accuracy_score(y_test, y_pred)}\")\n", - "\n", - "# Визуализация результатов\n", - "conf_matrix = confusion_matrix(y_test, y_pred)\n", - "sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues')\n", - "plt.xlabel('Predicted')\n", - "plt.ylabel('Actual')\n", - "plt.title('Confusion Matrix')\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Ориентир**\n" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "MAE: 37795.639591701794\n", - "MSE: 2482079980.9527493\n", - "RMSE: 49820.47752634201\n", - "R²: 0.37127352660208646\n", - "Ориентиры для предсказания заработной платы не достигнуты.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "d:\\MII\\AIM-PIbd-32-Kaznacheeva-E-K\\aimenv\\Lib\\site-packages\\sklearn\\metrics\\_regression.py:492: FutureWarning: 'squared' is deprecated in version 1.4 and will be removed in 1.6. To calculate the root mean squared error, use the function'root_mean_squared_error'.\n", - " warnings.warn(\n" - ] - } - ], - "source": [ - "import pandas as pd\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n", + "from sklearn.model_selection import train_test_split, RandomizedSearchCV\n", + "from sklearn.preprocessing import OneHotEncoder, StandardScaler\n", "from sklearn.compose import ColumnTransformer\n", "from sklearn.pipeline import Pipeline\n", "from sklearn.linear_model import LinearRegression\n", - "from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score\n", + "from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor\n", + "from scipy.stats import uniform, randint\n", "\n", + "# Загрузка данных\n", "df = pd.read_csv(\"..//static//csv//ds_salaries.csv\")\n", "\n", - "# Предобработка данных\n", - "categorical_features = ['experience_level', 'employment_type', 'job_title', 'employee_residence', 'company_location', 'company_size']\n", - "numeric_features = ['work_year', 'remote_ratio']\n", + "# ... (ваш код предобработки данных, как в предыдущем примере) ...\n", "\n", - "preprocessor = ColumnTransformer(\n", - " transformers=[\n", - " ('num', StandardScaler(), numeric_features),\n", - " ('cat', OneHotEncoder(handle_unknown='ignore'), categorical_features)])\n", + "# Определение распределений для гиперпараметров\n", + "param_distributions = {\n", + " 'Linear Regression': {\n", + " 'regressor__fit_intercept': [True, False],\n", + " 'regressor__positive': [True, False]\n", + " },\n", + " 'Random Forest': {\n", + " 'regressor__n_estimators': randint(50, 200),\n", + " 'regressor__max_depth': [None, 10, 20],\n", + " 'regressor__min_samples_split': randint(2, 11),\n", + " 'regressor__min_samples_leaf': randint(1, 5),\n", + " 'regressor__bootstrap': [True, False]\n", + " },\n", + " 'Gradient Boosting': {\n", + " 'regressor__n_estimators': randint(50, 200),\n", + " 'regressor__learning_rate': uniform(0.01, 0.49), # uniform distribution for learning rate\n", + " 'regressor__max_depth': [3, 5, 7],\n", + " 'regressor__min_samples_split': randint(2, 11),\n", + " 'regressor__min_samples_leaf': randint(1, 5),\n", + " 'regressor__subsample': uniform(0.5, 0.5) # uniform distribution for subsample\n", "\n", - "X = df.drop('salary_in_usd', axis=1)\n", - "y = df['salary_in_usd']\n", + " }\n", + "}\n", "\n", - "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n", + "# Словарь для хранения лучших моделей и их гиперпараметров\n", + "best_models = {}\n", "\n", - "model = Pipeline(steps=[\n", - " ('preprocessor', preprocessor),\n", - " ('regressor', LinearRegression())])\n", + "# Цикл для обучения и настройки гиперпараметров каждой модели\n", + "for model_name, model_params in param_distributions.items():\n", + " if model_name == 'Linear Regression':\n", + " model = LinearRegression()\n", + " elif model_name == 'Random Forest':\n", + " model = RandomForestRegressor(random_state=42)\n", + " elif model_name == 'Gradient Boosting':\n", + " model = GradientBoostingRegressor(random_state=42)\n", + " else:\n", + " continue #Обработка неизвестных моделей\n", "\n", - "model.fit(X_train, y_train)\n", + " pipeline = Pipeline([('regressor', model)])\n", + " random_search = RandomizedSearchCV(pipeline, param_distributions=model_params, n_iter=10, cv=3, n_jobs=-1, random_state=42)\n", + " random_search.fit(X_train, y_train)\n", + " best_models[model_name] = random_search.best_params_\n", "\n", - "y_pred = model.predict(X_test)\n", "\n", - "mae = mean_absolute_error(y_test, y_pred)\n", - "mse = mean_squared_error(y_test, y_pred)\n", - "rmse = mean_squared_error(y_test, y_pred, squared=False)\n", - "r2 = r2_score(y_test, y_pred)\n", + "# Визуализация лучших гиперпараметров\n", "\n", - "print(f\"MAE: {mae}\")\n", - "print(f\"MSE: {mse}\")\n", - "print(f\"RMSE: {rmse}\")\n", - "print(f\"R²: {r2}\")\n", + "fig, axes = plt.subplots(len(best_models), 1, figsize=(10, 5 * len(best_models)))\n", + "if len(best_models) == 1:\n", + " axes = [axes] # обработка случая с одной моделью\n", "\n", - "# Проверяем, достигнуты ли ориентиры\n", - "if r2 >= 0.75 and mae <= 15000 and rmse <= 20000:\n", - " print(\"Ориентиры для предсказания заработной платы достигнуты!\")\n", - "else:\n", - " print(\"Ориентиры для предсказания заработной платы не достигнуты.\")" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Accuracy: 0.7217043941411452\n", - "Classification Report:\n", - " precision recall f1-score support\n", - "\n", - " EN 0.55 0.48 0.51 67\n", - " EX 0.46 0.26 0.33 23\n", - " MI 0.48 0.54 0.51 157\n", - " SE 0.83 0.83 0.83 504\n", - "\n", - " accuracy 0.72 751\n", - " macro avg 0.58 0.53 0.55 751\n", - "weighted avg 0.72 0.72 0.72 751\n", - "\n", - "Confusion Matrix:\n", - "[[ 32 0 20 15]\n", - " [ 0 6 5 12]\n", - " [ 14 0 84 59]\n", - " [ 12 7 65 420]]\n", - "Ориентиры для классификации уровня опыта не достигнуты.\n" - ] - } - ], - "source": [ - "import pandas as pd\n", - "from sklearn.model_selection import train_test_split\n", - "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n", - "from sklearn.compose import ColumnTransformer\n", - "from sklearn.pipeline import Pipeline\n", - "from sklearn.ensemble import RandomForestClassifier\n", - "from sklearn.metrics import accuracy_score, classification_report, confusion_matrix\n", + "for i, (model_name, params) in enumerate(best_models.items()):\n", + " axes[i].bar(params.keys(), params.values())\n", + " axes[i].set_title(f\"Лучшие гиперпараметры для {model_name}\")\n", + " axes[i].set_xticklabels(params.keys(), rotation=45, ha=\"right\") #Поворачиваем подписи на оси х\n", + " axes[i].tick_params(axis='x', which='major', labelsize=8) # Размер шрифта подписей оси х\n", "\n", - "# Загружаем набор данных\n", - "df = pd.read_csv(\"..//static//csv//ds_salaries.csv\")\n", - "\n", - "# Предобработка данных\n", - "categorical_features = ['employment_type', 'job_title', 'employee_residence', 'company_location', 'company_size']\n", - "numeric_features = ['work_year', 'salary_in_usd', 'remote_ratio']\n", - "\n", - "preprocessor = ColumnTransformer(\n", - " transformers=[\n", - " ('num', StandardScaler(), numeric_features),\n", - " ('cat', OneHotEncoder(handle_unknown='ignore'), categorical_features)])\n", - "\n", - "X = df.drop('experience_level', axis=1)\n", - "y = df['experience_level']\n", - "\n", - "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n", - "\n", - "model = Pipeline(steps=[\n", - " ('preprocessor', preprocessor),\n", - " ('classifier', RandomForestClassifier(random_state=42))])\n", - "\n", - "model.fit(X_train, y_train)\n", - "\n", - "y_pred = model.predict(X_test)\n", - "\n", - "accuracy = accuracy_score(y_test, y_pred)\n", - "print(f\"Accuracy: {accuracy}\")\n", - "\n", - "print(\"Classification Report:\")\n", - "print(classification_report(y_test, y_pred))\n", - "\n", - "print(\"Confusion Matrix:\")\n", - "print(confusion_matrix(y_test, y_pred))\n", - "\n", - "# Проверяем, достигнуты ли ориентиры\n", - "if accuracy >= 0.80:\n", - " print(\"Ориентиры для классификации уровня опыта достигнуты!\")\n", - "else:\n", - " print(\"Ориентиры для классификации уровня опыта не достигнуты.\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Конвейер" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "import pandas as pd\n", - "from sklearn.base import BaseEstimator, TransformerMixin\n", - "from sklearn.compose import ColumnTransformer\n", - "from sklearn.impute import SimpleImputer\n", - "from sklearn.preprocessing import OneHotEncoder, StandardScaler\n", - "from sklearn.pipeline import Pipeline\n", - "\n", - "# Определение столбцов\n", - "numeric_columns = [\"work_year\", \"salary\", \"salary_in_usd\", \"remote_ratio\"]\n", - "cat_columns = [\"experience_level\", \"employment_type\", \"job_title\", \"salary_currency\", \"employee_residence\", \"company_location\", \"company_size\"]\n", - "\n", - "# Обработка числовых данных: заполнение пропущенных значений медианой и стандартизация\n", - "preprocessing_num_class = Pipeline(steps=[\n", - " ('imputer', SimpleImputer(strategy='median')),\n", - " ('scaler', StandardScaler())\n", - "])\n", - "\n", - "# Обработка категориальных данных: заполнение пропущенных значений наиболее частым значением и one-hot encoding\n", - "preprocessing_cat_class = Pipeline(steps=[\n", - " ('imputer', SimpleImputer(strategy='most_frequent')),\n", - " ('onehot', OneHotEncoder(handle_unknown='ignore'))\n", - "])\n", - "\n", - "# Объединение всех преобразований в один ColumnTransformer\n", - "features_preprocessing = ColumnTransformer(\n", - " verbose_feature_names_out=False,\n", - " transformers=[\n", - " (\"prepocessing_num\", preprocessing_num_class, numeric_columns),\n", - " (\"prepocessing_cat\", preprocessing_cat_class, cat_columns),\n", - " ],\n", - " remainder=\"passthrough\"\n", - ")\n", - "\n", - "# Определение конвейера\n", - "pipeline_end = Pipeline(\n", - " [\n", - " (\"features_preprocessing\", features_preprocessing),\n", - " ]\n", - ")\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "ename": "NameError", - "evalue": "name 'train_test_split' is not defined", - "output_type": "error", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[1;32mIn[5], line 2\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[38;5;66;03m# Разделение данных на тренировочный и тестовый наборы\u001b[39;00m\n\u001b[1;32m----> 2\u001b[0m X_train, X_test \u001b[38;5;241m=\u001b[39m \u001b[43mtrain_test_split\u001b[49m(df, test_size\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0.2\u001b[39m, random_state\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m42\u001b[39m)\n\u001b[0;32m 4\u001b[0m \u001b[38;5;66;03m# Применение конвейера для предобработки данных\u001b[39;00m\n\u001b[0;32m 5\u001b[0m preprocessing_result \u001b[38;5;241m=\u001b[39m pipeline_end\u001b[38;5;241m.\u001b[39mfit_transform(X_train)\n", - "\u001b[1;31mNameError\u001b[0m: name 'train_test_split' is not defined" - ] - } - ], - "source": [ - "# Разделение данных на тренировочный и тестовый наборы\n", - "X_train, X_test = train_test_split(df, test_size=0.2, random_state=42)\n", - "\n", - "# Применение конвейера для предобработки данных\n", - "preprocessing_result = pipeline_end.fit_transform(X_train)\n", - "\n", - "# Получение имен столбцов после преобразования\n", - "feature_names = pipeline_end.named_steps['features_preprocessing'].get_feature_names_out()\n", - "\n", - "# Создание DataFrame с преобразованными данными\n", - "preprocessed_df = pd.DataFrame(\n", - " preprocessing_result,\n", - " columns=feature_names,\n", - ")\n", - "\n", - "# Вывод преобразованного DataFrame\n", - "print(preprocessed_df)" + "plt.tight_layout()\n", + "plt.show()\n" ] } ],