kochkareva_elizaveta_lab_5 is ready
This commit is contained in:
parent
a8c58683dd
commit
30fee258ca
BIN
kochkareva_elizaveta_lab_5/MaxSalaryChart.png
Normal file
BIN
kochkareva_elizaveta_lab_5/MaxSalaryChart.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 85 KiB |
BIN
kochkareva_elizaveta_lab_5/MinSalaryChart.png
Normal file
BIN
kochkareva_elizaveta_lab_5/MinSalaryChart.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 82 KiB |
53
kochkareva_elizaveta_lab_5/README.md
Normal file
53
kochkareva_elizaveta_lab_5/README.md
Normal file
@ -0,0 +1,53 @@
|
||||
|
||||
# Лабораторная работа 5. Вариант 15
|
||||
|
||||
### Задание
|
||||
Использовать линейную регрессию, самостоятельно сформулировав задачу.
|
||||
|
||||
### Как запустить лабораторную работу
|
||||
Для запуска программы необходимо с помощью командной строки в корневой директории файлов прокета прописать:
|
||||
```
|
||||
python main.py
|
||||
```
|
||||
### Какие технологии использовали
|
||||
- Библиотека *numpy* для работы с массивами.
|
||||
- Библиотека *pandas* для работы с данными в формате таблицы.
|
||||
- Библиотека *matplotlib pyplot* - для визуализации данных.
|
||||
- Библиотека *sklearn*:
|
||||
- *LinearRegression* для создания и работы с моделью Линейной регрессии.
|
||||
- *train_test_split* для разделения набора данных на обучающую и тестовую выборки.
|
||||
- RFE для рекурсивного отбора признаков
|
||||
|
||||
### Описание лабораторной работы
|
||||
#### Сформулированная задача
|
||||
Задачи анализа, решаемая регрессией: предсказать диапазон окладов на основе других признаков.
|
||||
#### Оценка важности параметров
|
||||
|
||||
Для решения данной задачи будем рассматривать отдельно столбцы `"Max Salary"` и `"Min Salary"`, а также произведем оценку важности отстальных параметров/столбцов датасета с помощью алгоритма RFE, аналогично прошлой лабораторной работе.
|
||||
|
||||
В результате получаем следующее:
|
||||
```
|
||||
Оценка важности параметров для нахождения минимальной оплаты труда
|
||||
{'Qualifications': 1.0, 'Work Type': 1.0, 'Preference': 1.0, 'Min Experience': 1.0, 'Max Experience': 1.0, 'day': 1.0, "'Casual Dress Code, Social and Recreational Activities, Employee Referral Programs, Health and Wellness Facilities, Life and Disability Insurance'": 1.0, "'Childcare Assistance, Paid Time Off (PTO), Relocation Assistance, Flexible Work Arrangements, Professional Development'": 1.0, "'Employee Assistance Programs (EAP), Tuition Reimbursement, Profit-Sharing, Transportation Benefits, Parental Leave'": 1.0, "'Employee Referral Programs, Financial Counseling, Health and Wellness Facilities, Casual Dress Code, Flexible Spending Accounts (FSAs)'": 1.0, "'Flexible Spending Accounts (FSAs), Relocation Assistance, Legal Assistance, Employee Recognition Programs, Financial Counseling'": 1.0, "'Health Insurance, Retirement Plans, Flexible Work Arrangements, Employee Assistance Programs (EAP), Bonuses and Incentive Programs'": 1.0, "'Legal Assistance, Bonuses and Incentive Programs, Wellness Programs, Employee Discounts, Retirement Plans'": 1.0, "'Life and Disability Insurance, Stock Options or Equity Grants, Employee Recognition Programs, Health Insurance, Social and Recreational Activities'": 1.0, "'Transportation Benefits, Professional Development, Bonuses and Incentive Programs, Profit-Sharing, Employee Discounts'": 1.0, "'Tuition Reimbursement, Stock Options or Equity Grants, Parental Leave, Wellness Programs, Childcare Assistance'": 1.0, "'Health Insurance, Retirement Plans, Paid Time Off (PTO), Flexible Work Arrangements, Employee Assistance Programs (EAP)'": 0.5, 'year': 0.33, 'month': 0.25, 'State': 0.2, 'location': 0.17, 'Country': 0.14, 'Role': 0.12, 'Job Portal': 0.11, 'City': 0.1, 'Industry': 0.09, 'Job Title': 0.08, 'skills': 0.08, 'Company': 0.07, 'Sector': 0.07, 'Company Size': 0.06, 'Max Salary': 0.06, 'Ticker': 0.06}
|
||||
Оценка важности параметров для нахождения максимальной оплаты труда
|
||||
{'Work Type': 1.0, 'Preference': 1.0, 'Min Experience': 1.0, 'Max Experience': 1.0, 'year': 1.0, "'Casual Dress Code, Social and Recreational Activities, Employee Referral Programs, Health and Wellness Facilities, Life and Disability Insurance'": 1.0, "'Childcare Assistance, Paid Time Off (PTO), Relocation Assistance, Flexible Work Arrangements, Professional Development'": 1.0, "'Employee Assistance Programs (EAP), Tuition Reimbursement, Profit-Sharing, Transportation Benefits, Parental Leave'": 1.0, "'Employee Referral Programs, Financial Counseling, Health and Wellness Facilities, Casual Dress Code, Flexible Spending Accounts (FSAs)'": 1.0, "'Flexible Spending Accounts (FSAs), Relocation Assistance, Legal Assistance, Employee Recognition Programs, Financial Counseling'": 1.0, "'Health Insurance, Retirement Plans, Flexible Work Arrangements, Employee Assistance Programs (EAP), Bonuses and Incentive Programs'": 1.0, "'Health Insurance, Retirement Plans, Paid Time Off (PTO), Flexible Work Arrangements, Employee Assistance Programs (EAP)'": 1.0, "'Legal Assistance, Bonuses and Incentive Programs, Wellness Programs, Employee Discounts, Retirement Plans'": 1.0, "'Life and Disability Insurance, Stock Options or Equity Grants, Employee Recognition Programs, Health Insurance, Social and Recreational Activities'": 1.0, "'Transportation Benefits, Professional Development, Bonuses and Incentive Programs, Profit-Sharing, Employee Discounts'": 1.0, "'Tuition Reimbursement, Stock Options or Equity Grants, Parental Leave, Wellness Programs, Childcare Assistance'": 1.0, 'month': 0.5, 'Country': 0.33, 'location': 0.25, 'day': 0.2, 'Qualifications': 0.17, 'State': 0.14, 'Sector': 0.12, 'Industry': 0.11, 'Role': 0.1, 'Ticker': 0.09, 'Job Portal': 0.08, 'Company': 0.08, 'skills': 0.07, 'City': 0.07, 'Company Size': 0.06, 'Job Title': 0.06, 'Min Salary': 0.06}
|
||||
```
|
||||
|
||||
Как можно заметить наиболее значимые параметры для столбцов `"Max Salary"` и `"Min Salary"` почти аналогичны, однако для `"Min Salary"` также важен параметр `"Qualifications"`, а для `"Max Salary"` - `"year"`.
|
||||
|
||||
#### Линейная регрессия
|
||||
Для предсказать диапазон окладов на основе других признаков создадим два метода для столбцов `"Max Salary"` и `"Min Salary"`, где скопируем данные датасета и удалим из него столбец целевого значения и столбцы/параматеры, которые имеют наименьшую значимость.
|
||||
|
||||
Затем, разделим датасет на тестувую и обучающую выборк, создаем экземпляр модели линейной регрессии с помощью класса `LinearRegression()`, которая будет использоваться для построения линейной регрессии. Обучаем модель на обучающем наборе данных `X_train` и `y_train` с помощью метода `fit()`. Затем используем обученную модель для прогнозирования целевых переменных на тестовом наборе данных `X_test` с помощью метода `predict()`. Полученные прогнозы сохраняются в переменную `y_pred`. И вычисляем коэффициент детерминации (R-квадрат) для для оценки качества модели регрессии на тестовом наборе данных с помощью метода `score()`.
|
||||
|
||||
Выполним построение графиков:
|
||||
|
||||
|
||||
![График линейной регрессии "Min Salary"](MinSalaryChart.png)
|
||||
|
||||
![График линейной регрессии "Max Salary"](MaxSalaryChart.png)
|
||||
|
||||
### Вывод
|
||||
Исходя из данных графиков, можно сделать вывод о том, что модели линейной регрессии не объясняют вариацию в данных и дают негативное значение, т.к. коэффициент детерминации равен *-0,00104...*.Обычно, отрицательное значение коэффициента детерминации указывает на то, что модель показывает худшие результаты, чем простая горизонтальная линия, которая является наихудшим предсказанием.
|
||||
|
||||
Исходя из этого, можно сделать вывод, что линейная регрессия, представленная данной моделью, плохо соответствует данным и не объясняет вариацию в данных. Возможно, требуется рассмотреть другие модели или улучшить текущую модель, чтобы достичь более точных предсказаний.
|
125
kochkareva_elizaveta_lab_5/main.py
Normal file
125
kochkareva_elizaveta_lab_5/main.py
Normal file
@ -0,0 +1,125 @@
|
||||
import os.path
|
||||
import pandas as pd
|
||||
from matplotlib import pyplot as plt
|
||||
from sklearn.feature_selection import RFE
|
||||
from sklearn.linear_model import LinearRegression
|
||||
from sklearn.model_selection import train_test_split
|
||||
|
||||
#Задачи анализа, решаемые регрессией: предсказать диапазон окладов или компенсаций
|
||||
# на основе других признаков: опыт, квалификация, тип работы и т.д.
|
||||
|
||||
|
||||
picfld = os.path.join('static', 'charts')
|
||||
|
||||
data = pd.read_csv('D:/Интеллектуальные информационные системы/Dataset/updated_job_descriptions.csv')
|
||||
|
||||
def linear_regression_min_salary():
|
||||
y = data['Min Salary']
|
||||
df = data.copy()
|
||||
# удаляем целевое значение и наименее важные параметры
|
||||
df.drop(['Min Salary', 'Preference', 'day', 'month', 'Job Portal', 'State', 'location', 'Country', 'Industry', 'skills',
|
||||
'Role', 'Job Title', 'City', 'Sector', 'Ticker', 'Company Size', 'Company', 'Max Salary'],
|
||||
axis=1, inplace=True)
|
||||
X_train, X_test, y_train, y_test = train_test_split(df.values, y.values, test_size=0.0002, train_size=0.2)
|
||||
model = LinearRegression()
|
||||
model.fit(X_train, y_train)
|
||||
y_pred = model.predict(X_test)
|
||||
r_sq = model.score(X_test, y_test)
|
||||
plt.plot(y_test, c="#bd0000", label="\"y\" исходная")
|
||||
plt.plot(y_pred, c="#00BFFF",
|
||||
label="\"y\" предсказанная \n" "Кд = " + str(r_sq))
|
||||
plt.legend(loc='lower left')
|
||||
plt.title("Линейная регрессия")
|
||||
plt.savefig('static/charts/MinSalaryChart.png')
|
||||
plt.close()
|
||||
|
||||
|
||||
def linear_regression_max_salary():
|
||||
y = data['Max Salary']
|
||||
df = data.copy()
|
||||
# удаляем целевое значение и наименее важные параметры
|
||||
df.drop(['Max Salary', 'Max Experience', 'Job Portal', 'day', 'Sector', 'Industry', 'Country', 'location', 'Job Title',
|
||||
'Ticker', 'Company', 'City', 'State', 'Role', 'skills', 'Qualifications', 'Company Size', 'Min Salary'], axis=1, inplace=True)
|
||||
X_train, X_test, y_train, y_test = train_test_split(df.values, y.values, test_size=0.0002, train_size=0.2)
|
||||
model = LinearRegression()
|
||||
model.fit(X_train, y_train)
|
||||
y_pred = model.predict(X_test)
|
||||
r_sq = model.score(X_test, y_test)
|
||||
plt.plot(y_test, c="#bd0000", label="\"y\" исходная")
|
||||
plt.plot(y_pred, c="#00BFFF",
|
||||
label="\"y\" предсказанная \n" "Кд = " + str(r_sq))
|
||||
plt.legend(loc='lower left')
|
||||
plt.title("Линейная регрессия")
|
||||
plt.savefig('static/charts/MaxSalaryChart.png')
|
||||
plt.close()
|
||||
|
||||
|
||||
# оценка важности параметров
|
||||
def RFE_max_salary():
|
||||
df = data.copy()
|
||||
y = data['Max Salary']
|
||||
df.drop(["Max Salary"], axis=1, inplace=True)
|
||||
X_train, X_test, y_train, y_test = train_test_split(df.values, y.values, test_size=0.2)
|
||||
column_names = ['Qualifications', 'Country', 'location', 'Work Type', 'Company Size', 'Preference', 'Job Title', 'Role', 'Job Portal',
|
||||
'skills', 'Company', 'Min Experience', 'Max Experience', 'Min Salary',
|
||||
'Sector', 'Industry', 'City', 'State', 'Ticker', 'year', 'month', 'day',
|
||||
"'Casual Dress Code, Social and Recreational Activities, Employee Referral Programs, Health and Wellness Facilities, Life and Disability Insurance'",
|
||||
"'Childcare Assistance, Paid Time Off (PTO), Relocation Assistance, Flexible Work Arrangements, Professional Development'",
|
||||
"'Employee Assistance Programs (EAP), Tuition Reimbursement, Profit-Sharing, Transportation Benefits, Parental Leave'",
|
||||
"'Employee Referral Programs, Financial Counseling, Health and Wellness Facilities, Casual Dress Code, Flexible Spending Accounts (FSAs)'",
|
||||
"'Flexible Spending Accounts (FSAs), Relocation Assistance, Legal Assistance, Employee Recognition Programs, Financial Counseling'",
|
||||
"'Health Insurance, Retirement Plans, Flexible Work Arrangements, Employee Assistance Programs (EAP), Bonuses and Incentive Programs'",
|
||||
"'Health Insurance, Retirement Plans, Paid Time Off (PTO), Flexible Work Arrangements, Employee Assistance Programs (EAP)'",
|
||||
"'Legal Assistance, Bonuses and Incentive Programs, Wellness Programs, Employee Discounts, Retirement Plans'",
|
||||
"'Life and Disability Insurance, Stock Options or Equity Grants, Employee Recognition Programs, Health Insurance, Social and Recreational Activities'",
|
||||
"'Transportation Benefits, Professional Development, Bonuses and Incentive Programs, Profit-Sharing, Employee Discounts'",
|
||||
"'Tuition Reimbursement, Stock Options or Equity Grants, Parental Leave, Wellness Programs, Childcare Assistance'"]
|
||||
estimator = LinearRegression()
|
||||
rfe_model = RFE(estimator)
|
||||
rfe_model.fit(X_train, y_train)
|
||||
ranks = rank_to_dict_rfe(rfe_model.ranking_, column_names)
|
||||
sorted_dict = dict(sorted(ranks.items(), key=lambda x: x[1], reverse=True))
|
||||
print("Оценка важности параметров для нахождения максимальной оплаты труда")
|
||||
print(sorted_dict)
|
||||
|
||||
|
||||
def RFE_min_salary():
|
||||
df = data.copy()
|
||||
y = data['Min Salary']
|
||||
df.drop(["Min Salary"], axis=1, inplace=True)
|
||||
X_train, X_test, y_train, y_test = train_test_split(df.values, y.values, test_size=0.2)
|
||||
column_names = ['Qualifications', 'Country', 'location', 'Work Type', 'Company Size', 'Preference', 'Job Title', 'Role', 'Job Portal',
|
||||
'skills', 'Company', 'Min Experience', 'Max Experience', 'Max Salary',
|
||||
'Sector', 'Industry', 'City', 'State', 'Ticker', 'year', 'month', 'day',
|
||||
"'Casual Dress Code, Social and Recreational Activities, Employee Referral Programs, Health and Wellness Facilities, Life and Disability Insurance'",
|
||||
"'Childcare Assistance, Paid Time Off (PTO), Relocation Assistance, Flexible Work Arrangements, Professional Development'",
|
||||
"'Employee Assistance Programs (EAP), Tuition Reimbursement, Profit-Sharing, Transportation Benefits, Parental Leave'",
|
||||
"'Employee Referral Programs, Financial Counseling, Health and Wellness Facilities, Casual Dress Code, Flexible Spending Accounts (FSAs)'",
|
||||
"'Flexible Spending Accounts (FSAs), Relocation Assistance, Legal Assistance, Employee Recognition Programs, Financial Counseling'",
|
||||
"'Health Insurance, Retirement Plans, Flexible Work Arrangements, Employee Assistance Programs (EAP), Bonuses and Incentive Programs'",
|
||||
"'Health Insurance, Retirement Plans, Paid Time Off (PTO), Flexible Work Arrangements, Employee Assistance Programs (EAP)'",
|
||||
"'Legal Assistance, Bonuses and Incentive Programs, Wellness Programs, Employee Discounts, Retirement Plans'",
|
||||
"'Life and Disability Insurance, Stock Options or Equity Grants, Employee Recognition Programs, Health Insurance, Social and Recreational Activities'",
|
||||
"'Transportation Benefits, Professional Development, Bonuses and Incentive Programs, Profit-Sharing, Employee Discounts'",
|
||||
"'Tuition Reimbursement, Stock Options or Equity Grants, Parental Leave, Wellness Programs, Childcare Assistance'"]
|
||||
estimator = LinearRegression()
|
||||
rfe_model = RFE(estimator)
|
||||
rfe_model.fit(X_train, y_train)
|
||||
ranks = rank_to_dict_rfe(rfe_model.ranking_, column_names)
|
||||
sorted_dict = dict(sorted(ranks.items(), key=lambda x: x[1], reverse=True))
|
||||
print("Оценка важности параметров для нахождения минимальной оплаты труда")
|
||||
print(sorted_dict)
|
||||
|
||||
|
||||
def rank_to_dict_rfe(ranking, names):
|
||||
n_ranks = [float(1 / i) for i in ranking]
|
||||
n_ranks = map(lambda x: round(x, 2), n_ranks)
|
||||
return dict(zip(names, n_ranks))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# linear_regression_min_salary()
|
||||
# linear_regression_max_salary()
|
||||
RFE_min_salary()
|
||||
RFE_max_salary()
|
||||
|
BIN
kochkareva_elizaveta_lab_5/static/charts/MaxSalaryChart.png
Normal file
BIN
kochkareva_elizaveta_lab_5/static/charts/MaxSalaryChart.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 85 KiB |
BIN
kochkareva_elizaveta_lab_5/static/charts/MinSalaryChart.png
Normal file
BIN
kochkareva_elizaveta_lab_5/static/charts/MinSalaryChart.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 82 KiB |
Loading…
Reference in New Issue
Block a user