Обучаюсь Data Science и делюсь практикой: Python, аналитика данных, машинное обучение и новости AI.
Конспекты, разборы задач, примеры кода и свежие технологии, всё по делу и без «воды».
Для тех, кто идёт в AI от нуля к проектам.
Связь: @Ml_panda_user
Post #236
75

Мини-кейс: два baseline + простая модель (с CSV) 🔧
Задача: прочитать данные из файла, посчитать два простых прогноза и одну мини-модель, сравнить ошибки на последних 7 днях и выбрать лучший.
Данные: файл post2_demo_data.csv с колонками date (YYYY-MM-DD) и y. Положите файл рядом со скриптом. (Гипотеза: H=7 подходит при недельной сезонности.)
Что получили в итоге:
➖Три числа MAE (lag1, MA3, модель) — видно, кто точнее.
➖Прогноз «на завтра» тремя способами — можно сравнить.
➖Итоговую строку-резюме: победитель и, если выиграла модель, на сколько % она лучше лучшего baseline.
Файл в комментариях для проведения прогноза.
В комментариях покажите, что получится у вас)
#python #MAE #аналитикаданных
Задача: прочитать данные из файла, посчитать два простых прогноза и одну мини-модель, сравнить ошибки на последних 7 днях и выбрать лучший.
Данные: файл post2_demo_data.csv с колонками date (YYYY-MM-DD) и y. Положите файл рядом со скриптом. (Гипотеза: H=7 подходит при недельной сезонности.)
import pandas as pd # работа с таблицей
from sklearn.linear_model import LinearRegression # простая модель
from sklearn.metrics import mean_absolute_error # метрика ошибки (MAE)
df = pd.read_csv('post2_demo_data.csv') # читаем CSV (файл лежит рядом с кодом)
df['date'] = pd.to_datetime(df['date']) # превращаем текст даты в тип "дата"
df = df.sort_values('date').reset_index(drop=True) # упорядочиваем по времени
df['x_lag1'] = df['y'].shift(1) # признак: "как вчера" (вчерашнее значение)
df['x_ma3'] = df['y'].rolling(3).mean().shift(1) # признак: среднее за 3 прошлых дня (без подсматривания вперёд)
H = 7 # тестовый горизонт: 7 последних дней (гипотеза)
train = df.iloc[:-H].dropna(subset=['y','x_lag1','x_ma3']) # обучаемся на всей истории до теста
test = df.iloc[-H:].dropna(subset=['y','x_lag1','x_ma3']) # тестируем на последних днях
test = test.copy() # отдельная копия для предсказаний
test['pred_lag1'] = test['x_lag1'] # baseline 1: прогноз = "как вчера"
test['pred_ma3'] = test['x_ma3'] # baseline 2: прогноз = "среднее 3 дней"
model = LinearRegression().fit( # обучаем простую модель (веса для двух признаков)
train[['x_lag1','x_ma3']], # X-признаки
train['y'] # y-цель
)
test['pred_lin'] = model.predict(test[['x_lag1','x_ma3']]) # прогноз модели на тесте
mae_lag1 = mean_absolute_error(test['y'], test['pred_lag1']) # MAE "как вчера"
mae_ma3 = mean_absolute_error(test['y'], test['pred_ma3']) # MAE "среднее 3 дней"
mae_lin = mean_absolute_error(test['y'], test['pred_lin']) # MAE модели
last = df['y'].iloc[-1] # вчерашнее фактическое
y_next_lag1 = last # прогноз на завтра по lag1
y_next_ma3 = df['y'].tail(3).mean() # прогноз на завтра по MA3
y_next_lin = model.predict([[y_next_lag1, y_next_ma3]])[0] # прогноз на завтра по модели
print(f"MAE lag1={mae_lag1:.2f} | MAE MA3={mae_ma3:.2f} | MAE модель={mae_lin:.2f}") # сравнение ошибок
print(f'Завтра: lag1={y_next_lag1:.2f}, MA3={y_next_ma3:.2f}, модель={y_next_lin:.2f}') # три прогноза на завтра
Что получили в итоге:
➖Три числа MAE (lag1, MA3, модель) — видно, кто точнее.
➖Прогноз «на завтра» тремя способами — можно сравнить.
➖Итоговую строку-резюме: победитель и, если выиграла модель, на сколько % она лучше лучшего baseline.
Файл в комментариях для проведения прогноза.
В комментариях покажите, что получится у вас)
#python #MAE #аналитикаданных
- 👍 4
- 🔥 3
- 🫡 2











