From 004b648f947256f2b435cff162d8e3b93698948d Mon Sep 17 00:00:00 2001 From: sergeevevgen Date: Fri, 10 Nov 2023 03:25:00 +0400 Subject: [PATCH 1/3] create lab5 --- sergeev_evgenii_lab_5/readme.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 sergeev_evgenii_lab_5/readme.md diff --git a/sergeev_evgenii_lab_5/readme.md b/sergeev_evgenii_lab_5/readme.md new file mode 100644 index 0000000..e69de29 From 183980443eb15a77b094b8652327a30fca6abb63 Mon Sep 17 00:00:00 2001 From: sergeevevgen Date: Mon, 13 Nov 2023 23:50:04 +0400 Subject: [PATCH 2/3] just start --- sergeev_evgenii_lab_5/lab5.py | 37 +++++++++++++++++++++++++++++++++ sergeev_evgenii_lab_5/readme.md | 16 ++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 sergeev_evgenii_lab_5/lab5.py diff --git a/sergeev_evgenii_lab_5/lab5.py b/sergeev_evgenii_lab_5/lab5.py new file mode 100644 index 0000000..29d08cc --- /dev/null +++ b/sergeev_evgenii_lab_5/lab5.py @@ -0,0 +1,37 @@ +# Импортируем необходимые библиотеки +import pandas as pd +from sklearn.model_selection import train_test_split +from sklearn.linear_model import Ridge +from sklearn.metrics import mean_squared_error +from sklearn.preprocessing import StandardScaler + +# Загрузим данные +data = pd.read_csv("ваш_файл.csv") # Замените "ваш_файл.csv" на имя вашего файла данных + +# Выберем признаки (features) и целевую переменную (target) +features = data[['lead_time', 'arrival_date_year', 'arrival_date_week_number', 'stays_in_weekend_nights', + 'stays_in_week_nights', 'adults', 'children', 'babies', 'previous_cancellations', + 'previous_bookings_not_canceled', 'booking_changes', 'days_in_waiting_list', + 'required_car_parking_spaces', 'total_of_special_requests']] +target = data['adr'] + +# Разделим данные на тренировочный и тестовый наборы +X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42) + +# Масштабируем признаки для лучшей производительности модели +scaler = StandardScaler() +X_train_scaled = scaler.fit_transform(X_train) +X_test_scaled = scaler.transform(X_test) + +# Создаем модель гребневой регрессии +ridge_model = Ridge(alpha=1.0) # Можете изменить alpha в зависимости от необходимой регуляризации + +# Обучаем модель на тренировочных данных +ridge_model.fit(X_train_scaled, y_train) + +# Делаем предсказания на тестовых данных +predictions = ridge_model.predict(X_test_scaled) + +# Оцениваем производительность модели +mse = mean_squared_error(y_test, predictions) +print(f"Среднеквадратичная ошибка (MSE): {mse}") diff --git a/sergeev_evgenii_lab_5/readme.md b/sergeev_evgenii_lab_5/readme.md index e69de29..b7c8c3c 100644 --- a/sergeev_evgenii_lab_5/readme.md +++ b/sergeev_evgenii_lab_5/readme.md @@ -0,0 +1,16 @@ +# Задание +Предсказать, является ли транзакция мошеннической или нет на основе других данных о транзакции, таких как сумма транзакции, местоположение, банк, возраст и пол клиента +### Как запустить лабораторную работу: +ЛР запускается в файле zavrazhnova_svetlana_lab_5.py через Run, а затем в консоли должны появится вычисления + +### Технологии +Методы PolynomialFeatures и LogisticRegression из библиотеки sklearn + +### Что делает лабораторная: +Обучаются модели логистической и полиномиальной регрессии на обучающих данных и используются эти модели для предсказания мошеннических транзакций на тестовых данных. Оценивается точность каждой модели с помощью метрики accuracy. + +### Пример выходных значений: +![result.png](result.png) + +### Вывод: +Точность полиномиальной регрессии и логистической регрессии равны 1.0, это означает, что обе модели предсказали метки классов на тестовом наборе данных без ошибок. То есть они смогли точно определить, является ли транзакция мошеннической или нет. From fd3118c1c914a8c3d27c1e9ab7f0943ebdc3c7d8 Mon Sep 17 00:00:00 2001 From: sergeevevgen Date: Tue, 14 Nov 2023 01:27:22 +0400 Subject: [PATCH 3/3] done --- sergeev_evgenii_lab_5/lab5.py | 45 ++++++++++++++++++++++++--------- sergeev_evgenii_lab_5/readme.md | 35 ++++++++++++++++--------- 2 files changed, 56 insertions(+), 24 deletions(-) diff --git a/sergeev_evgenii_lab_5/lab5.py b/sergeev_evgenii_lab_5/lab5.py index 29d08cc..0ce0fe4 100644 --- a/sergeev_evgenii_lab_5/lab5.py +++ b/sergeev_evgenii_lab_5/lab5.py @@ -1,19 +1,31 @@ # Импортируем необходимые библиотеки +import math import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import Ridge -from sklearn.metrics import mean_squared_error -from sklearn.preprocessing import StandardScaler +from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score +from sklearn.preprocessing import StandardScaler, LabelEncoder # Загрузим данные -data = pd.read_csv("ваш_файл.csv") # Замените "ваш_файл.csv" на имя вашего файла данных +df = pd.read_csv("hotel_bookings_raw.csv") +df.dropna(inplace=True) -# Выберем признаки (features) и целевую переменную (target) -features = data[['lead_time', 'arrival_date_year', 'arrival_date_week_number', 'stays_in_weekend_nights', - 'stays_in_week_nights', 'adults', 'children', 'babies', 'previous_cancellations', - 'previous_bookings_not_canceled', 'booking_changes', 'days_in_waiting_list', - 'required_car_parking_spaces', 'total_of_special_requests']] -target = data['adr'] +# Объявляю объект для преобразования строковых значений в числовые +label_encoder = LabelEncoder() + +# Выберем признаки и целевую переменную (доход) +features_list = ['lead_time', 'stays_in_weekend_nights', + 'stays_in_week_nights', 'adults', 'children', 'babies', 'meal', 'customer_type', + 'previous_cancellations', + 'previous_bookings_not_canceled', 'required_car_parking_spaces', + 'CPI_AVG', 'INFLATION', 'INFLATION_CHG', 'GDP', 'CPI_HOTELS'] +features = df[features_list].copy() + +# Применяю к каждому столбцу признака преобразования +for f in features_list: + features[f] = label_encoder.fit_transform(features[f]) + +target = df['adr'].copy() # Разделим данные на тренировочный и тестовый наборы X_train, X_test, y_train, y_test = train_test_split(features, target, test_size=0.2, random_state=42) @@ -32,6 +44,15 @@ ridge_model.fit(X_train_scaled, y_train) # Делаем предсказания на тестовых данных predictions = ridge_model.predict(X_test_scaled) -# Оцениваем производительность модели -mse = mean_squared_error(y_test, predictions) -print(f"Среднеквадратичная ошибка (MSE): {mse}") +# Оцениваем производительность модели по MSE метрике +mse = math.sqrt(mean_squared_error(y_test, predictions)) + +# Оцениваем производительность модели по MAE метрике +mae = mean_absolute_error(y_test, predictions) + +# Оцениваем производительность модели по R^2 метрике +r2 = r2_score(y_test, predictions) + +print(f"Среднеквадратичная ошибка (MSE): {round(mse, 2)}%") +print(f"Среднеабсолютное отклонение (MAE): {round(mae, 2)}%") +print(f"Коэффициент детерминации (R^2): {round(r2, 4) * 100}%") diff --git a/sergeev_evgenii_lab_5/readme.md b/sergeev_evgenii_lab_5/readme.md index b7c8c3c..fe20ee6 100644 --- a/sergeev_evgenii_lab_5/readme.md +++ b/sergeev_evgenii_lab_5/readme.md @@ -1,16 +1,27 @@ -# Задание -Предсказать, является ли транзакция мошеннической или нет на основе других данных о транзакции, таких как сумма транзакции, местоположение, банк, возраст и пол клиента -### Как запустить лабораторную работу: -ЛР запускается в файле zavrazhnova_svetlana_lab_5.py через Run, а затем в консоли должны появится вычисления +# Лабораторная работа 5. Регрессия +## Задание +Использовать метод регрессии по варианту (24 == 4) для данных из таблицы, самостоятельно сформулировав задачу. +Оценить, насколько хорошо она подходит для решения сформулированной мной задачи. -### Технологии -Методы PolynomialFeatures и LogisticRegression из библиотеки sklearn +Ссылка на мой датасет: https://www.kaggle.com/datasets/mlardi/hotel-booking-demand-with-economic-indicators +## Задача +Прогнозировать значение целевой переменной (доход) на основе набора экономических показателей, +используя гребневую регрессию. +### Запуск программы +Файл lab5.py содержит и запускает программу. -### Что делает лабораторная: -Обучаются модели логистической и полиномиальной регрессии на обучающих данных и используются эти модели для предсказания мошеннических транзакций на тестовых данных. Оценивается точность каждой модели с помощью метрики accuracy. +### Описание программы +Программа состоит из двух частей: +1. Она считывает файл с данными о двух отелях: City Hotel и Resort Hotel. Содержит множество различных метрик +2. Далее определяет необходимые признаки для характеристики дохода +3. Обучает модель и выводит результат по различным метрикам +### Результаты тестирования +По результатам тестирования, можно сказать следующее: -### Пример выходных значений: -![result.png](result.png) +Вывод: +* Среднеквадратичная ошибка (MSE) - 39% - показывает самое большое отклонение +* Среднеабсолютное отклонение (MAE) - 29% - показывает средний уровень отклонения +* Коэффициент детерминации (R^2) - 32% - показывает уровень изменчивости целевой переменной -### Вывод: -Точность полиномиальной регрессии и логистической регрессии равны 1.0, это означает, что обе модели предсказали метки классов на тестовом наборе данных без ошибок. То есть они смогли точно определить, является ли транзакция мошеннической или нет. +Результаты показывают, что модель может быть улучшена, +так как имеется значительный уровень ошибки и только небольшая доля изменчивости данных объяснена моделью