Merge pull request 'zavrazhnova_svetlana_lab3 is ready' (#16) from zavrazhnova_svetlana_lab_3 into main

Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/16
This commit is contained in:
Alexey 2023-10-08 13:46:48 +04:00
commit 5992dba12c
9 changed files with 1660 additions and 0 deletions

135
.idea/workspace.xml Normal file
View File

@ -0,0 +1,135 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="0ceb130e-88da-4a20-aad6-17f5ab4226ac" name="Changes" comment="" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Python Script" />
</list>
</option>
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
<component name="ProjectId" id="2VlZqWiOX68aCf0o2y0AtYJWURS" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"last_opened_file_path": "D:/ulstukek/Course4/IIS/labs"
}
}]]></component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="D:\ulstukek\Course4\IIS\IISLabs\IIS_2023_1\zavrazhnova_svetlana_lab_3" />
<recent name="D:\ulstukek\Course4\IIS\IISLabs\IIS_2023_1\zavrazhnova_svetlana_lab_1" />
</key>
</component>
<component name="RunManager" selected="Python.zavrazhnova_svetlana_lab3_2">
<configuration name="zavrazhnova_svetlana_lab3_2" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="IIS_2023_1" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/zavrazhnova_svetlana_lab_3" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/zavrazhnova_svetlana_lab_3/zavrazhnova_svetlana_lab3_2.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="zavrazhnova_svetlana_lab_2" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="IIS_2023_1" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/zavrazhnova_svetlana_lab_2" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/zavrazhnova_svetlana_lab_2/zavrazhnova_svetlana_lab_2.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="zavrazhnova_svetlana_lab_3_1" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="IIS_2023_1" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/zavrazhnova_svetlana_lab_3" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/zavrazhnova_svetlana_lab_3/zavrazhnova_svetlana_lab_3_1.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<recent_temporary>
<list>
<item itemvalue="Python.zavrazhnova_svetlana_lab3_2" />
<item itemvalue="Python.zavrazhnova_svetlana_lab_3_1" />
<item itemvalue="Python.zavrazhnova_svetlana_lab_2" />
</list>
</recent_temporary>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="0ceb130e-88da-4a20-aad6-17f5ab4226ac" name="Changes" comment="" />
<created>1695412818437</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1695412818437</updated>
</task>
<servers />
</component>
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State />
</value>
</entry>
</map>
</option>
</component>
</project>

View File

@ -0,0 +1,58 @@
# Задание
- Часть 1. По данным о пассажирах Титаника решите задачу классификации (с помощью дерева решений), в которой по различным характеристикам пассажиров требуется найти у выживших пассажиров два наиболее важных признака из трех рассматриваемых (по варианту).
Вариант: Pclass, Sex, Embarked
- Часть 2. Решите с помощью библиотечной реализации дерева решений задачу: Запрограммировать дерево решений как минимум на 99% ваших данных для задачи: Зависимость Мошенничества (fraud_label) от возраста (Age) и пола (gender) . Проверьте работу модели на оставшемся проценте, сделайте вывод.
### Как запустить лабораторную работу:
1 часть ЛР запускается в файле `zavrazhnova_svetlana_lab_3_1.py` через Run, в консоли должны появится вычисления.
2 часть ЛР запускается в файле `zavrazhnova_svetlana_lab_3_2.py` через Run, в консоли должны появится вычисления.
### Технологии
В библиотеке scikit-learn решающие деревья реализованы
в классах sklearn.tree.DecisionTreeСlassifier (для классификации)
и sklearn.tree.DecisionTreeRegressor (для регрессии).
### Что делает лабораторная:
Часть 1:
- Загружается выборка из файла titanic.csv с помощью пакета
Pandas
- Отбирается в выборку 3 признака: класс пассажира
(Pclass), его пол (Sex) и Embarked.
- Определяется целевая переменная (2urvived)
- Обучается решающее дерево с параметром random_state=241
и остальными параметрами по умолчанию (речь идет
о параметрах конструктора DecisionTreeСlassifier)
- Выводятся важности признаков
Часть 2:
- Загружается выборка из файла fraud_dataset.csv с помощью пакета
Pandas
- Отбирается в выборку 2 признака: возраст жертвы мошенничества
(age) и его пол (gender).
- Определяется целевая переменная (fraud_label)
- Резделяются данные на обучающую и тестовую
- Обучается решающее дерево классификацией DecisionTreeСlassifier и регрессией DecisionTreeRegressor
- Выводятся важности признаков, предсказание значений на тестовой выборке и оценка производительности модели
### Пример выходных значений:
Часть 1: Выводится список из первых 5 записей в таблице с нужными столбцами и важности признаков по каждому классу
![res_lab3_1](res_lab3_1.png)
Часть 2:
![list_lab3_2](list_lab3_2.png)
![res_lab3_2](res_lab3_2.png)
### Вывод по 2 части ЛР:
Исходя из этих результатов, можно сделать вывод, что для задачи предсказания мошенничества (fraud_label) на основе возраста (age) и пола (gender) лучше подходит модель дерева классификации. Она показала 100% точность на тестовой выборке, а также позволяет определить важности признаков.
С другой стороны, дерево регрессии показало неопределенный R^2 score и имеет значительно большую среднеквадратичную ошибку, что говорит о том, что эта модель не подходит для данной задачи.
Результат regression score = nan происходит из-за того, что при test_size=0.01 выделенная тестовая выборка содержит меньше двух образцов. Это приводит к неопределенности значения коэффициента детерминации R^2, который вычисляется в случае регрессии. Таким образом, значение score regression становится "nan".
Однако, в случае классификации, где используется DecisionTreeClassifier, в test_size=0.01 попадает достаточное количество образцов для оценки производительности модели. Поэтому значение score classifier равно 1.0.
`Таким образом`, для задачи классификации мошенничества на основе возраста и пола более предпочтительна модель дерева классификации.

View File

@ -0,0 +1,87 @@
transaction_id,transaction_amount,location,merchant,age,gender,fraud_label
1,1000.00,New York,ABC Corp,35,M,0
2,500.00,Chicago,XYZ Inc,45,F,0
3,2000.00,Los Angeles,ABC Corp,28,M,1
4,1500.00,San Francisco,XYZ Inc,30,F,0
5,800.00,Chicago,ABC Corp,50,F,0
6,3000.00,New York,XYZ Inc,42,M,1
7,1200.00,San Francisco,ABC Corp,55,F,0
8,900.00,Los Angeles,XYZ Inc,37,M,0
9,2500.00,Chicago,ABC Corp,33,F,1
10,1800.00,New York,XYZ Inc,48,M,0
11,750.00,San Francisco,ABC Corp,29,F,0
12,2200.00,Chicago,XYZ Inc,51,M,0
13,900.00,New York,ABC Corp,40,F,0
14,1600.00,Los Angeles,XYZ Inc,26,M,0
15,3000.00,San Francisco,ABC Corp,45,F,1
16,1200.00,Chicago,XYZ Inc,34,M,0
17,800.00,New York,ABC Corp,47,F,0
18,1900.00,Los Angeles,XYZ Inc,32,M,0
19,1100.00,San Francisco,ABC Corp,52,F,0
20,4000.00,Chicago,XYZ Inc,38,M,1
21,900.00,New York,ABC Corp,31,F,0
22,1700.00,Los Angeles,XYZ Inc,49,M,0
23,1000.00,San Francisco,ABC Corp,36,F,0
24,2300.00,Chicago,XYZ Inc,27,M,1
25,950.00,New York,ABC Corp,41,F,0
26,1400.00,Los Angeles,XYZ Inc,54,M,0
27,2800.00,San Francisco,ABC Corp,39,F,1
28,1100.00,Chicago,XYZ Inc,44,M,0
29,750.00,New York,ABC Corp,30,F,0
30,2000.00,Los Angeles,XYZ Inc,46,M,0
31,1250.00,San Francisco,ABC Corp,35,F,0
32,2100.00,Chicago,XYZ Inc,43,M,0
33,950.00,New York,ABC Corp,56,F,0
34,1800.00,Los Angeles,XYZ Inc,29,M,0
35,3200.00,San Francisco,ABC Corp,48,F,1
36,1300.00,Chicago,XYZ Inc,37,M,0
37,900.00,New York,ABC Corp,51,F,0
38,2000.00,Los Angeles,XYZ Inc,33,M,0
39,1050.00,San Francisco,ABC Corp,42,F,0
40,2400.00,Chicago,XYZ Inc,26,M,0
41,800.00,New York,ABC Corp,45,F,0
42,1500.00,Los Angeles,XYZ Inc,31,M,0
43,2800.00,San Francisco,ABC Corp,50,F,1
44,1350.00,Chicago,XYZ Inc,28,M,0
45,920.00,New York,ABC Corp,47,F,0
46,2000.00,Los Angeles,XYZ Inc,36,M,0
47,1125.00,San Francisco,ABC Corp,52,F,0
48,1900.00,Chicago,XYZ Inc,38,M,1
49,850.00,New York,ABC Corp,32,F,0
50,1750.00,Los Angeles,XYZ Inc,49,M,0
51,950.00,San Francisco,ABC Corp,27,F,0
52,2300.00,Chicago,XYZ Inc,41,M,0
53,850.00,New York,ABC Corp,54,F,0
54,1600.00,Los Angeles,XYZ Inc,39,M,0
55,3000.00,San Francisco,ABC Corp,46,F,1
56,1250.00,Chicago,XYZ Inc,35,M,0
57,800.00,New York,ABC Corp,56,F,0
58,2200.00,Los Angeles,XYZ Inc,29,M,0
59,1050.00,San Francisco,ABC Corp,48,F,0
60,4000.00,Chicago,XYZ Inc,37,M,1
61,950.00,New York,ABC Corp,30,F,0
62,1700.00,Los Angeles,XYZ Inc,49,M,0
63,1000.00,San Francisco,ABC Corp,36,F,0
64,2800.00,Chicago,XYZ Inc,27,M,1
65,900.00,New York,ABC Corp,41,F,0
66,1400.00,Los Angeles,XYZ Inc,54,M,0
67,3200.00,San Francisco,ABC Corp,39,F,1
68,1100.00,Chicago,XYZ Inc,44,M,0
69,750.00,New York,ABC Corp,30,F,0
70,2000.00,Los Angeles,XYZ Inc,46,M,0
71,1250.00,San Francisco,ABC Corp,35,F,0
72,2100.00,Chicago,XYZ Inc,43,M,0
73,950.00,New York,ABC Corp,56,F,0
74,1800.00,Los Angeles,XYZ Inc,29,M,0
75,3200.00,San Francisco,ABC Corp,48,F,1
76,1300.00,Chicago,XYZ Inc,37,M,0
77,900.00,New York,ABC Corp,51,F,0
78,2000.00,Los Angeles,XYZ Inc,33,M,0
79,1050.00,San Francisco,ABC Corp,42,F,0
80,2400.00,Chicago,XYZ Inc,26,M,0
81,800.00,New York,ABC Corp,45,F,0
82,1500.00,Los Angeles,XYZ Inc,31,M,0
83,2800.00,San Francisco,ABC Corp,50,F,1
84,1350.00,Chicago,XYZ Inc,28,M,0
85,920.00,New York,ABC Corp,47,F,0
86,2000.00,Los Angeles,XYZ Inc,36,M,0
1 transaction_id transaction_amount location merchant age gender fraud_label
2 1 1000.00 New York ABC Corp 35 M 0
3 2 500.00 Chicago XYZ Inc 45 F 0
4 3 2000.00 Los Angeles ABC Corp 28 M 1
5 4 1500.00 San Francisco XYZ Inc 30 F 0
6 5 800.00 Chicago ABC Corp 50 F 0
7 6 3000.00 New York XYZ Inc 42 M 1
8 7 1200.00 San Francisco ABC Corp 55 F 0
9 8 900.00 Los Angeles XYZ Inc 37 M 0
10 9 2500.00 Chicago ABC Corp 33 F 1
11 10 1800.00 New York XYZ Inc 48 M 0
12 11 750.00 San Francisco ABC Corp 29 F 0
13 12 2200.00 Chicago XYZ Inc 51 M 0
14 13 900.00 New York ABC Corp 40 F 0
15 14 1600.00 Los Angeles XYZ Inc 26 M 0
16 15 3000.00 San Francisco ABC Corp 45 F 1
17 16 1200.00 Chicago XYZ Inc 34 M 0
18 17 800.00 New York ABC Corp 47 F 0
19 18 1900.00 Los Angeles XYZ Inc 32 M 0
20 19 1100.00 San Francisco ABC Corp 52 F 0
21 20 4000.00 Chicago XYZ Inc 38 M 1
22 21 900.00 New York ABC Corp 31 F 0
23 22 1700.00 Los Angeles XYZ Inc 49 M 0
24 23 1000.00 San Francisco ABC Corp 36 F 0
25 24 2300.00 Chicago XYZ Inc 27 M 1
26 25 950.00 New York ABC Corp 41 F 0
27 26 1400.00 Los Angeles XYZ Inc 54 M 0
28 27 2800.00 San Francisco ABC Corp 39 F 1
29 28 1100.00 Chicago XYZ Inc 44 M 0
30 29 750.00 New York ABC Corp 30 F 0
31 30 2000.00 Los Angeles XYZ Inc 46 M 0
32 31 1250.00 San Francisco ABC Corp 35 F 0
33 32 2100.00 Chicago XYZ Inc 43 M 0
34 33 950.00 New York ABC Corp 56 F 0
35 34 1800.00 Los Angeles XYZ Inc 29 M 0
36 35 3200.00 San Francisco ABC Corp 48 F 1
37 36 1300.00 Chicago XYZ Inc 37 M 0
38 37 900.00 New York ABC Corp 51 F 0
39 38 2000.00 Los Angeles XYZ Inc 33 M 0
40 39 1050.00 San Francisco ABC Corp 42 F 0
41 40 2400.00 Chicago XYZ Inc 26 M 0
42 41 800.00 New York ABC Corp 45 F 0
43 42 1500.00 Los Angeles XYZ Inc 31 M 0
44 43 2800.00 San Francisco ABC Corp 50 F 1
45 44 1350.00 Chicago XYZ Inc 28 M 0
46 45 920.00 New York ABC Corp 47 F 0
47 46 2000.00 Los Angeles XYZ Inc 36 M 0
48 47 1125.00 San Francisco ABC Corp 52 F 0
49 48 1900.00 Chicago XYZ Inc 38 M 1
50 49 850.00 New York ABC Corp 32 F 0
51 50 1750.00 Los Angeles XYZ Inc 49 M 0
52 51 950.00 San Francisco ABC Corp 27 F 0
53 52 2300.00 Chicago XYZ Inc 41 M 0
54 53 850.00 New York ABC Corp 54 F 0
55 54 1600.00 Los Angeles XYZ Inc 39 M 0
56 55 3000.00 San Francisco ABC Corp 46 F 1
57 56 1250.00 Chicago XYZ Inc 35 M 0
58 57 800.00 New York ABC Corp 56 F 0
59 58 2200.00 Los Angeles XYZ Inc 29 M 0
60 59 1050.00 San Francisco ABC Corp 48 F 0
61 60 4000.00 Chicago XYZ Inc 37 M 1
62 61 950.00 New York ABC Corp 30 F 0
63 62 1700.00 Los Angeles XYZ Inc 49 M 0
64 63 1000.00 San Francisco ABC Corp 36 F 0
65 64 2800.00 Chicago XYZ Inc 27 M 1
66 65 900.00 New York ABC Corp 41 F 0
67 66 1400.00 Los Angeles XYZ Inc 54 M 0
68 67 3200.00 San Francisco ABC Corp 39 F 1
69 68 1100.00 Chicago XYZ Inc 44 M 0
70 69 750.00 New York ABC Corp 30 F 0
71 70 2000.00 Los Angeles XYZ Inc 46 M 0
72 71 1250.00 San Francisco ABC Corp 35 F 0
73 72 2100.00 Chicago XYZ Inc 43 M 0
74 73 950.00 New York ABC Corp 56 F 0
75 74 1800.00 Los Angeles XYZ Inc 29 M 0
76 75 3200.00 San Francisco ABC Corp 48 F 1
77 76 1300.00 Chicago XYZ Inc 37 M 0
78 77 900.00 New York ABC Corp 51 F 0
79 78 2000.00 Los Angeles XYZ Inc 33 M 0
80 79 1050.00 San Francisco ABC Corp 42 F 0
81 80 2400.00 Chicago XYZ Inc 26 M 0
82 81 800.00 New York ABC Corp 45 F 0
83 82 1500.00 Los Angeles XYZ Inc 31 M 0
84 83 2800.00 San Francisco ABC Corp 50 F 1
85 84 1350.00 Chicago XYZ Inc 28 M 0
86 85 920.00 New York ABC Corp 47 F 0
87 86 2000.00 Los Angeles XYZ Inc 36 M 0

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,49 @@
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeRegressor, DecisionTreeClassifier
from sklearn.metrics import mean_squared_error
from sklearn.metrics import accuracy_score
# Загрузка данных из csv-файла
data = pd.read_csv('fraud_dataset.csv', index_col='transaction_id')
# Приведение пола к числовому виду
data['gender'] = data['gender'].map({'M': 0, 'F': 1})
# Разделение данных на признаки (X) и целевую переменную (y)
X = data[['age', 'gender']]
#респечатка первых 5 строк данных
print (X.head())
y = data['fraud_label']
# Разделение данных на обучающую и тестовую выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.01, random_state=42)
#Решение с помощью дерева регрессии
regression_tree = DecisionTreeRegressor()
regression_tree.fit(X_train, y_train)
test_score_reg = regression_tree.score(X_test, y_test)
# Получение важности признаков
feature_importances_reg = regression_tree.feature_importances_
# Предсказание значений на тестовой выборке regression
y_pred_reg = regression_tree.predict(X_test)
# Оценка производительности модели regression
mse = mean_squared_error(y_test, y_pred_reg)
#Решение с помощью дерева классификации
classifier_tree = DecisionTreeClassifier()
classifier_tree.fit(X_train, y_train)
test_score_class = classifier_tree.score(X_test, y_test)
feature_importances_class = classifier_tree.feature_importances_
y_pred_class = classifier_tree.predict(X_test)
accuracy = accuracy_score(y_test, y_pred_class)
print("Решением с помощью дерева регрессии:")
print("score regression", test_score_reg)
print("feature_importances_reg", feature_importances_reg)
print("Mean Squared Error regression: {:.2f}".format(mse))
print("")
print("Решением с помощью дерева классификации:")
print("score classifier", test_score_class)
print("feature_importances_class", feature_importances_class)
print("Accuracy classifier: {:.2f}%".format(accuracy * 100))

View File

@ -0,0 +1,21 @@
import pandas
from sklearn.tree import DecisionTreeClassifier
import numpy as np
data = pandas.read_csv('titanic.csv', index_col='Passengerid')
#выгрузка непустых данных
data=data.loc[(np.isnan(data['Pclass'])==False) & (np.isnan(data['Sex'])==False)
&(np.isnan(data['Embarked'])==False) &
(np.isnan(data['2urvived'])==False)]
#отбор нужных столбцов
corr = data[['Pclass', 'Sex', 'Embarked']]
#респечатка первых 5 строк данных
print (corr.head())
#определение целевой переменной
y = data['2urvived']
#создание и обучение дерева решений
clf = DecisionTreeClassifier(random_state=241)
clf.fit(corr, y)
#получение и распечатка важностей признаков
importances=clf.feature_importances_
print (importances)