TGViewer
Интеллект в коде: Python, AI, Data Science Интеллект в коде: Python, AI, Data Science @ai_in_progress · 125 subscribers
Post #236 75
Мини-кейс: два baseline + простая модель (с CSV) 🔧
Задача
: прочитать данные из файла, посчитать два простых прогноза и одну мини-модель, сравнить ошибки на последних 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
More from @ai_in_progress
  1. Mar 4, 2026Seedance 2.0 теперь стоит копейки. Официальные цены API вышли сегодня! ByteDance только чт…
  2. Mar 2, 2026🔥ГЛАВНЫЕ НОВОСТИ ИИ ЗА СЕГОДНЯ ➖Grok Imagine взорвал всех Новая фича Расширение от кадра…
  3. Mar 1, 2026Seedance 2.0 - модель, о которой сейчас говорят почти все, кто следит за развитием AI-виде…
  4. Feb 28, 2026Небольшое обновление формата канала📊 Изначально этот канал создавался исключительно для м…
  5. Feb 10, 2026Аналитический пайплайн: двигатель, который превращает данные в решения Вы слышали модное «…
  6. Feb 7, 2026С возвращением в мир данных! 🌐 Ваш канал по аналитике снова в активной фазе. Перерыв окон…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →