AIM-PIbd-31-Kryukov-A-I/Lab_3/lab3.ipynb

754 lines
123 KiB
Plaintext
Raw Normal View History

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
" ## Вариант 13 \n",
" https://www.kaggle.com/datasets/nancyalaswad90/yamana-gold-inc-stock-price?resource=download\n"
]
},
{
"cell_type": "code",
2024-11-15 23:40:48 +04:00
"execution_count": 89,
"metadata": {},
"outputs": [
{
2024-11-15 23:40:48 +04:00
"data": {
"text/plain": [
"Index(['Date', 'Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume',\n",
" 'Day_of_week', 'Month', 'Year'],\n",
" dtype='object')"
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"\n",
"data = pd.read_csv(\"..//static//csv//Yamana_Gold_Inc._AUY.csv\", sep=\",\", nrows=10000)\n",
2024-11-15 23:40:48 +04:00
"\n",
"# Преобразование даты\n",
"data['Date'] = pd.to_datetime(data['Date'])\n",
"\n",
"# Преобразование данных: создание новых признаков\n",
"data['Day_of_week'] = data['Date'].dt.dayofweek\n",
"data['Month'] = data['Date'].dt.month\n",
"data['Year'] = data['Date'].dt.year\n",
"data .columns"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#1. Бизнес-цели для набора данных по акции компании Yamana Gold Inc.\n",
"Цель 1: Прогнозирование изменения цены акции компании.\n",
"Прогнозирование цен на акции является одной из ключевых задач в области финансов и инвестирования. Задача состоит в предсказании будущих изменений стоимости акции на основе исторических данных, таких как открытие и закрытие торгов, объемы торгов и другие показатели.\n",
"\n",
"Цель 2: Оценка волатильности акций компании.\n",
"Измерение волатильности позволяет инвесторам оценить риск и принять решения по управлению капиталом. Задача заключается в прогнозировании уровня волатильности на основе исторической динамики цен, объемов торгов и других рыночных факторов.\n",
"\n",
"#2. Цели технического проекта для каждой бизнес-цели\n",
"Цель 1: Прогнозирование изменения цены акции компании\n",
"\n",
"Разработать модель машинного обучения для прогнозирования будущих цен акций на основе исторических данных.\n",
"Использовать регрессионные модели, такие как линейная регрессия или более сложные модели, например, LSTM (долгосрочная краткосрочная память) для временных рядов.\n",
"Цель 2: Оценка волатильности акций компании\n",
"\n",
"Создать модель, которая будет прогнозировать волатильность на основе исторических данных о ценах.\n",
"Использовать методы статистического анализа, такие как вычисление стандартного отклонения, или методы машинного обучения для более точной оценки волатильности.\n",
"\n",
"#3 Проверим датасет на пропуски и удалим при необходимости строки с недостающими данными"
]
},
{
"cell_type": "code",
2024-11-15 23:40:48 +04:00
"execution_count": 79,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2024-11-15 23:40:48 +04:00
"Date 0\n",
"Open 0\n",
"High 0\n",
"Low 0\n",
"Close 0\n",
"Adj Close 0\n",
"Volume 0\n",
"Day_of_week 0\n",
"Month 0\n",
"Year 0\n",
"dtype: int64"
]
},
2024-11-15 23:40:48 +04:00
"execution_count": 79,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"# Проверим на пропущенные значения\n",
"data.isnull().sum()\n",
"\n",
"# Заполним пропуски или удалим строки с пропусками\n",
"data = data.dropna()\n",
"\n",
"# Проверим, что данные очищены\n",
"data.isnull().sum()\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Конструирование признаков"
]
},
{
"cell_type": "code",
2024-11-15 23:40:48 +04:00
"execution_count": 80,
"metadata": {},
"outputs": [
{
2024-11-15 23:40:48 +04:00
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Date</th>\n",
" <th>Open</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Close</th>\n",
" <th>Adj Close</th>\n",
" <th>Volume</th>\n",
" <th>Day_of_week</th>\n",
" <th>Month</th>\n",
" <th>Year</th>\n",
" <th>Price_Change</th>\n",
" <th>SMA_5</th>\n",
" <th>SMA_20</th>\n",
" <th>STD_5</th>\n",
" <th>STD_20</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2001-06-22</td>\n",
" <td>3.428571</td>\n",
" <td>3.428571</td>\n",
" <td>3.428571</td>\n",
" <td>3.428571</td>\n",
" <td>2.806002</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" <td>6</td>\n",
" <td>2001</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2001-06-25</td>\n",
" <td>3.428571</td>\n",
" <td>3.428571</td>\n",
" <td>3.428571</td>\n",
" <td>3.428571</td>\n",
" <td>2.806002</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>6</td>\n",
" <td>2001</td>\n",
" <td>0.000000</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2001-06-26</td>\n",
" <td>3.714286</td>\n",
" <td>3.714286</td>\n",
" <td>3.714286</td>\n",
" <td>3.714286</td>\n",
" <td>3.039837</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>6</td>\n",
" <td>2001</td>\n",
" <td>0.285715</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2001-06-27</td>\n",
" <td>3.714286</td>\n",
" <td>3.714286</td>\n",
" <td>3.714286</td>\n",
" <td>3.714286</td>\n",
" <td>3.039837</td>\n",
" <td>0</td>\n",
" <td>2</td>\n",
" <td>6</td>\n",
" <td>2001</td>\n",
" <td>0.000000</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2001-06-28</td>\n",
" <td>3.714286</td>\n",
" <td>3.714286</td>\n",
" <td>3.714286</td>\n",
" <td>3.714286</td>\n",
" <td>3.039837</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>6</td>\n",
" <td>2001</td>\n",
" <td>0.000000</td>\n",
" <td>3.6</td>\n",
" <td>NaN</td>\n",
" <td>0.156493</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Date Open High Low Close Adj Close Volume \\\n",
"0 2001-06-22 3.428571 3.428571 3.428571 3.428571 2.806002 0 \n",
"1 2001-06-25 3.428571 3.428571 3.428571 3.428571 2.806002 0 \n",
"2 2001-06-26 3.714286 3.714286 3.714286 3.714286 3.039837 0 \n",
"3 2001-06-27 3.714286 3.714286 3.714286 3.714286 3.039837 0 \n",
"4 2001-06-28 3.714286 3.714286 3.714286 3.714286 3.039837 0 \n",
"\n",
" Day_of_week Month Year Price_Change SMA_5 SMA_20 STD_5 STD_20 \n",
"0 4 6 2001 NaN NaN NaN NaN NaN \n",
"1 0 6 2001 0.000000 NaN NaN NaN NaN \n",
"2 1 6 2001 0.285715 NaN NaN NaN NaN \n",
"3 2 6 2001 0.000000 NaN NaN NaN NaN \n",
"4 3 6 2001 0.000000 3.6 NaN 0.156493 NaN "
]
},
"execution_count": 80,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Создаем новый признак - разницу между текущей и предыдущей ценой (Price_Change)\n",
"data['Price_Change'] = data['Close'].diff()\n",
"\n",
"# Создадим скользящие средние для 5 и 20 дней\n",
"data['SMA_5'] = data['Close'].rolling(window=5).mean()\n",
"data['SMA_20'] = data['Close'].rolling(window=20).mean()\n",
"\n",
"# Стандартное отклонение для 5 и 20 дней\n",
"data['STD_5'] = data['Close'].rolling(window=5).std()\n",
"data['STD_20'] = data['Close'].rolling(window=20).std()\n",
"\n",
"data.head()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" Разделение данных на обучающую, контрольную и тестовую выборки"
]
},
{
"cell_type": "code",
"execution_count": 81,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"((3150, 10), (1050, 10), (1051, 10))"
]
},
"execution_count": 81,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.model_selection import train_test_split\n",
"\n",
2024-11-15 23:40:48 +04:00
"# Преобразуем колонку 'Date' в тип datetime для правильного сортирования\n",
"data['Date'] = pd.to_datetime(data['Date'])\n",
"\n",
"# Сортируем данные по дате, чтобы не нарушить временную зависимость\n",
"data = data.sort_values(by='Date')\n",
"\n",
"# Отделяем целевую переменную (например, Price_Change) и признаки\n",
2024-11-15 23:40:48 +04:00
"X = data[['Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume', 'SMA_5', 'SMA_20', 'STD_5', 'STD_20']]\n",
"y = data['Price_Change']\n",
"\n",
"# Разделение на обучающую, контрольную и тестовую выборки (60%, 20%, 20%)\n",
"X_train, X_temp, y_train, y_temp = train_test_split(X, y, test_size=0.4, shuffle=False)\n",
"X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, shuffle=False)\n",
"\n",
"# Проверка размеров выборок\n",
"(X_train.shape, X_val.shape, X_test.shape)\n"
]
},
2024-11-15 23:40:48 +04:00
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Конструирование признаков для решения задач"
]
},
{
"cell_type": "code",
2024-11-15 23:40:48 +04:00
"execution_count": 82,
"metadata": {},
"outputs": [],
2024-11-15 23:40:48 +04:00
"source": [
"# Признаки для задачи прогнозирования изменений цен\n",
"data['Price_Change'] = data['Close'].diff()\n",
"\n",
"# Скользящие средние и стандартное отклонение\n",
"data['SMA_5'] = data['Close'].rolling(window=5).mean()\n",
"data['SMA_20'] = data['Close'].rolling(window=20).mean()\n",
"data['STD_5'] = data['Close'].rolling(window=5).std()\n",
"data['STD_20'] = data['Close'].rolling(window=20).std()\n",
"\n",
"# Признаки для оценки волатильности\n",
"data['Volatility'] = data['Close'].rolling(window=5).std()\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Подготовка признаков: one-hot encoding, дискретизация, синтез признаков, масштабирование\n",
"One-hot encoding: Применим для категориальных признаков (например, день недели).\n",
"Масштабирование: Стандартизируем числовые признаки."
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Day_of_week Month\n",
"0 4 6\n",
"1 0 6\n",
"2 1 6\n",
"3 2 6\n",
"4 3 6\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Close</th>\n",
" <th>SMA_5</th>\n",
" <th>SMA_20</th>\n",
" <th>STD_5</th>\n",
" <th>STD_20</th>\n",
" <th>Day_of_week_1</th>\n",
" <th>Day_of_week_2</th>\n",
" <th>Day_of_week_3</th>\n",
" <th>Day_of_week_4</th>\n",
" <th>Month_2</th>\n",
" <th>Month_3</th>\n",
" <th>Month_4</th>\n",
" <th>Month_5</th>\n",
" <th>Month_6</th>\n",
" <th>Month_7</th>\n",
" <th>Month_8</th>\n",
" <th>Month_9</th>\n",
" <th>Month_10</th>\n",
" <th>Month_11</th>\n",
" <th>Month_12</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>-0.721096</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>-0.507666</td>\n",
" <td>-0.507962</td>\n",
" <td>-0.502320</td>\n",
" <td>1.999048</td>\n",
" <td>-0.28793</td>\n",
" <td>-0.309491</td>\n",
" <td>-0.300916</td>\n",
" <td>-0.297137</td>\n",
" <td>3.335719</td>\n",
" <td>-0.30429</td>\n",
" <td>-0.311702</td>\n",
" <td>-0.296377</td>\n",
" <td>-0.311335</td>\n",
" <td>-0.298274</td>\n",
" <td>-0.303543</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>-0.721096</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>-0.507666</td>\n",
" <td>-0.507962</td>\n",
" <td>-0.502320</td>\n",
" <td>-0.500238</td>\n",
" <td>-0.28793</td>\n",
" <td>-0.309491</td>\n",
" <td>-0.300916</td>\n",
" <td>-0.297137</td>\n",
" <td>3.335719</td>\n",
" <td>-0.30429</td>\n",
" <td>-0.311702</td>\n",
" <td>-0.296377</td>\n",
" <td>-0.311335</td>\n",
" <td>-0.298274</td>\n",
" <td>-0.303543</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>-0.660890</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>1.969800</td>\n",
" <td>-0.507962</td>\n",
" <td>-0.502320</td>\n",
" <td>-0.500238</td>\n",
" <td>-0.28793</td>\n",
" <td>-0.309491</td>\n",
" <td>-0.300916</td>\n",
" <td>-0.297137</td>\n",
" <td>3.335719</td>\n",
" <td>-0.30429</td>\n",
" <td>-0.311702</td>\n",
" <td>-0.296377</td>\n",
" <td>-0.311335</td>\n",
" <td>-0.298274</td>\n",
" <td>-0.303543</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>-0.660890</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>-0.507666</td>\n",
" <td>1.968649</td>\n",
" <td>-0.502320</td>\n",
" <td>-0.500238</td>\n",
" <td>-0.28793</td>\n",
" <td>-0.309491</td>\n",
" <td>-0.300916</td>\n",
" <td>-0.297137</td>\n",
" <td>3.335719</td>\n",
" <td>-0.30429</td>\n",
" <td>-0.311702</td>\n",
" <td>-0.296377</td>\n",
" <td>-0.311335</td>\n",
" <td>-0.298274</td>\n",
" <td>-0.303543</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>-0.660890</td>\n",
" <td>-0.686033</td>\n",
" <td>NaN</td>\n",
" <td>-0.269917</td>\n",
" <td>NaN</td>\n",
" <td>-0.507666</td>\n",
" <td>-0.507962</td>\n",
" <td>1.990763</td>\n",
" <td>-0.500238</td>\n",
" <td>-0.28793</td>\n",
" <td>-0.309491</td>\n",
" <td>-0.300916</td>\n",
" <td>-0.297137</td>\n",
" <td>3.335719</td>\n",
" <td>-0.30429</td>\n",
" <td>-0.311702</td>\n",
" <td>-0.296377</td>\n",
" <td>-0.311335</td>\n",
" <td>-0.298274</td>\n",
" <td>-0.303543</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Close SMA_5 SMA_20 STD_5 STD_20 Day_of_week_1 Day_of_week_2 \\\n",
"0 -0.721096 NaN NaN NaN NaN -0.507666 -0.507962 \n",
"1 -0.721096 NaN NaN NaN NaN -0.507666 -0.507962 \n",
"2 -0.660890 NaN NaN NaN NaN 1.969800 -0.507962 \n",
"3 -0.660890 NaN NaN NaN NaN -0.507666 1.968649 \n",
"4 -0.660890 -0.686033 NaN -0.269917 NaN -0.507666 -0.507962 \n",
"\n",
" Day_of_week_3 Day_of_week_4 Month_2 Month_3 Month_4 Month_5 \\\n",
"0 -0.502320 1.999048 -0.28793 -0.309491 -0.300916 -0.297137 \n",
"1 -0.502320 -0.500238 -0.28793 -0.309491 -0.300916 -0.297137 \n",
"2 -0.502320 -0.500238 -0.28793 -0.309491 -0.300916 -0.297137 \n",
"3 -0.502320 -0.500238 -0.28793 -0.309491 -0.300916 -0.297137 \n",
"4 1.990763 -0.500238 -0.28793 -0.309491 -0.300916 -0.297137 \n",
"\n",
" Month_6 Month_7 Month_8 Month_9 Month_10 Month_11 Month_12 \n",
"0 3.335719 -0.30429 -0.311702 -0.296377 -0.311335 -0.298274 -0.303543 \n",
"1 3.335719 -0.30429 -0.311702 -0.296377 -0.311335 -0.298274 -0.303543 \n",
"2 3.335719 -0.30429 -0.311702 -0.296377 -0.311335 -0.298274 -0.303543 \n",
"3 3.335719 -0.30429 -0.311702 -0.296377 -0.311335 -0.298274 -0.303543 \n",
"4 3.335719 -0.30429 -0.311702 -0.296377 -0.311335 -0.298274 -0.303543 "
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn.preprocessing import StandardScaler\n",
"import pandas as pd\n",
"\n",
"# Преобразуем дату, если это еще не сделано\n",
"data['Date'] = pd.to_datetime(data['Date'])\n",
"\n",
"# Добавим дополнительные признаки (день недели и месяц)\n",
"data['Day_of_week'] = data['Date'].dt.dayofweek\n",
"data['Month'] = data['Date'].dt.month\n",
"\n",
"# Проверим, что эти столбцы добавлены\n",
"print(data[['Day_of_week', 'Month']].head())\n",
"\n",
"# Выбираем признаки и целевую переменную\n",
"X = data[['Close', 'SMA_5', 'SMA_20', 'STD_5', 'STD_20', 'Day_of_week', 'Month']]\n",
"y = data['Price_Change']\n",
"\n",
"# Применяем one-hot encoding для категориальных признаков (Day_of_week и Month)\n",
"X = pd.get_dummies(X, columns=['Day_of_week', 'Month'], drop_first=True)\n",
"\n",
"# Масштабирование числовых признаков (Close, SMA, STD)\n",
"scaler = StandardScaler()\n",
"X_scaled = scaler.fit_transform(X)\n",
"\n",
"# Преобразуем обратно в DataFrame для удобства\n",
"X_scaled_df = pd.DataFrame(X_scaled, columns=X.columns)\n",
"\n",
"# Проверим результат\n",
"X_scaled_df.head()\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": []
},
2024-11-15 23:40:48 +04:00
{
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Users\\alexk\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\featuretools\\synthesis\\deep_feature_synthesis.py:169: UserWarning: Only one dataframe in entityset, changing max_depth to 1 since deeper features cannot be created\n",
" warnings.warn(\n"
]
}
],
"source": [
"import featuretools as ft\n",
"\n",
"# Создаем сущности для Featuretools\n",
"es = ft.EntitySet(id=\"stock_prices\")\n",
"es = es.add_dataframe(dataframe_name=\"stock_data\", dataframe=data, index=\"Date\")\n",
"\n",
"# Автоматическое создание признаков\n",
"feature_matrix, feature_defs = ft.dfs(entityset=es, target_dataframe_name=\"stock_data\")\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2024-11-15 23:40:48 +04:00
"#Оценка качества признаков\n",
"Оценка признаков на основе предсказательной способности модели и других критериев."
]
},
{
"cell_type": "code",
2024-11-15 23:40:48 +04:00
"execution_count": null,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
2024-11-15 23:40:48 +04:00
"5251\n",
"3150\n"
]
},
{
"ename": "AttributeError",
"evalue": "'numpy.ndarray' object has no attribute 'reset_index'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)",
"Cell \u001b[1;32mIn[88], line 7\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[38;5;66;03m# Приводим индексы к одному виду\u001b[39;00m\n\u001b[0;32m 6\u001b[0m y_train \u001b[38;5;241m=\u001b[39m y_train\u001b[38;5;241m.\u001b[39mreset_index(drop\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[1;32m----> 7\u001b[0m X_scaled \u001b[38;5;241m=\u001b[39m \u001b[43mX_scaled\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mreset_index\u001b[49m(drop\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n\u001b[0;32m 9\u001b[0m \u001b[38;5;66;03m# После этого продолжим обучение модели\u001b[39;00m\n\u001b[0;32m 10\u001b[0m model \u001b[38;5;241m=\u001b[39m LinearRegression()\n",
"\u001b[1;31mAttributeError\u001b[0m: 'numpy.ndarray' object has no attribute 'reset_index'"
]
}
],
"source": [
2024-11-15 23:40:48 +04:00
"# Проверим размеры данных\n",
"print(X_scaled_df.shape[0]) # Количество строк в X_scaled_df\n",
"print(y_train.shape[0]) # Количество строк в y_train\n",
"\n",
2024-11-15 23:40:48 +04:00
"# Приводим индексы к одному виду\n",
"y_train = y_train.reset_index(drop=True)\n",
"X_scaled_df = X_scaled_df.reset_index(drop=True)\n",
"\n",
2024-11-15 23:40:48 +04:00
"# После этого продолжим обучение модели\n",
"model = LinearRegression()\n",
"model.fit(X_scaled_df, y_train)\n",
"\n",
2024-11-15 23:40:48 +04:00
"# Прогнозирование и оценка качества\n",
"y_pred = model.predict(X_scaled_df)\n",
"\n",
"# Оценка качества модели\n",
"mse = mean_squared_error(y_test, y_pred)\n",
"r2 = r2_score(y_test, y_pred)\n",
"\n",
"mse, r2\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
2024-11-15 23:40:48 +04:00
"Визуализируем"
]
},
{
"cell_type": "code",
2024-11-15 23:40:48 +04:00
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
2024-11-15 23:40:48 +04:00
"image/png": "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
"text/plain": [
2024-11-15 23:40:48 +04:00
"<Figure size 1000x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
2024-11-15 23:40:48 +04:00
"# Визуализируем фактические и предсказанные значения\n",
"plt.figure(figsize=(10,6))\n",
"plt.plot(y_test.index, y_test, label='Actual Price Change', color='blue')\n",
"plt.plot(y_test.index, y_pred, label='Predicted Price Change', color='red')\n",
"plt.legend()\n",
2024-11-15 23:40:48 +04:00
"plt.title(\"Actual vs Predicted Price Change\")\n",
"plt.xlabel(\"Date\")\n",
"plt.ylabel(\"Price Change\")\n",
"plt.show()\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}