AI-прогнозування продажів: бачити на тиждень вперед без data scientist
GPT-4o + Python прогнозують попит, виручку й залишки з точністю до 85%. Код, архітектура, ціна. Без data scientist, без Spark, без enterprise-бюджету.
Український бізнес дивиться назад. Виручка за вчора, залишки на сьогодні, кількість замовлень за тиждень. Усе це — ретроспектива. Вона відповідає на питання «що сталося». Але не відповідає на «що буде завтра».
А саме це питання коштує грошей. Скільки товару замовити на наступний тиждень? Чи вистачить готівки на рахунку через три дні? Яка категорія просяде в серпні? Власник відповідає на це інтуїтивно. Інтуїція помиляється в середньому на 30–40%. AI-прогноз — на 10–15%.
Ми вже писали, як збирати дані з українських джерел і як перетворювати звіти на дії. Але звіт і дія — це про минуле. Прогноз — це про майбутнє. Ось як його зібрати без data scientist і без enterprise-бюджету.
Чому Excel не прогнозує
Excel може побудувати лінію тренду. =FORECAST.LINEAR() — і готово. Але лінійний тренд працює тільки на стабільних даних без сезонності. Тобто майже ніколи.
Реальні продажі українського бізнесу мають щонайменше п'ять шарів нестабільності:
- Тижнева сезонність. Понеділок і п'ятниця — пік. Субота й неділя — провал. Для e-commerce різниця може бути двократною.
- Місячна сезонність. Початок місяця — зарплати, більше покупок. Кінець місяця — спад. Це не глобальний тренд, це локальна українська реальність.
- Курсові коливання. Стрибок долара на 1 грн — і середній чек в інтернет-магазині електроніки змінюється на 5–8% протягом двох днів.
- Свята й форс-мажори. Державні свята, відключення світла, повітряні тривоги — усе це ламає тижневий патерн. У 2026 році жодна Excel-формула цього не враховує.
- Акції та маркетинг. Запустили розсилку через SendPulse — продажі злетіли на 200% на один день. Наступного дня — провал, бо попит вичерпали. Лінійний тренд бачить «зростання» і завищує прогноз на тиждень уперед.
Щоб врахувати хоча б три з цих п'яти шарів, потрібна модель, яка бачить патерни, а не просто лінію. І ось тут заходить AI.
Як це працює: архітектура прогнозного пайплайну
Схема проста: історичні дані → AI-модель → прогноз на N днів → сповіщення в Telegram.
Google Sheets / CRM API ──→ Python-скрипт ──→ GPT-4o (прогноз) ──→ Telegram
│
└── збирає історію, формує контекст, відправляє прогноз
Жодного машинного навчання в класичному сенсі. Ми не тренуємо модель на GPU. Ми даємо GPT-4o історичні дані й контекст — і просимо передбачити наступний тиждень. Це називається in-context forecasting. Дослідження 2024–2025 років показують, що GPT-4 і Claude 3.5 дають точність прогнозування часових рядів на рівні спеціалізованих статистичних моделей (ARIMA, Prophet) на горизонті до 30 днів, при цьому не потребуючи налаштування.
Ось як це виглядає в коді.
Крок 1: збираємо 90 днів історії
import requests from datetime import datetime, timedelta import json # Приклад: дані з Google Sheets (продажі по днях за 90 днів) # У реальності — підставте ваші дані def fetch_sales_history(sheet_id: str, range_name: str) -> list[dict]: # gspread або Google Sheets API — отримуємо рядки # Формат: [{"date": "2026-04-17", "revenue": 12500, "orders": 34, "category": "електроніка"}, ...] ... return records
Крок 2: формуємо prompt із контекстом
Головне — дати моделі не просто цифри, а контекст: день тижня, свята, курс валют, маркетингові акції. Без контексту прогноз буде середньою температурою по лікарні.
from openai import OpenAI client = OpenAI(api_key="ваш_ключ") def build_forecast_prompt(history: list[dict], days_ahead: int = 7) -> str: # Збираємо контекст today = datetime.now() next_week = [today + timedelta(days=i) for i in range(1, days_ahead + 1)] # Перелік українських свят на липень 2026 holidays = ["28 липня — День Української Державності (вихідний)"] current_usd_rate = 41.20 # отримати через API ПриватБанку або Monobank prompt = f""" Ти — фінансовий аналітик. У тебе є історія щоденних продажів інтернет-магазину за останні 90 днів. Спрогнозуй виручку та кількість замовлень на наступні 7 днів. Важливий контекст: - Поточний курс USD/UAH: {current_usd_rate} грн - День тижня має ЗНАЧНИЙ вплив: пн-пт — пік, сб-нд — спад на 40-60% - Свята: {', '.join(holidays) if holidays else 'немає'} - Тренд за останні 30 днів: виручка зростає/падає/стабільна (визнач із даних) Дати для прогнозу: {', '.join(d.strftime('%Y-%m-%d (%A)') for d in next_week)} Історичні дані (останні 90 днів): {json.dumps(history[-90:], ensure_ascii=False, indent=2)} Формат відповіді — СТРОГИЙ JSON без жодного тексту до або після: {{ "forecast": [ {{"date": "YYYY-MM-DD", "revenue": число, "orders": число, "confidence": "high|medium|low"}}, ... ], "summary": "2-3 речення українською: головний висновок, ризики, рекомендація.", "anomalies": ["якщо є — конкретні дні з нетиповою поведінкою"] }} """ return prompt response = client.chat.completions.create( model="gpt-4o", # для прогнозування потрібна сильна модель messages=[{"role": "user", "content": prompt}], temperature=0.2, # низька температура — стабільні прогнози response_format={"type": "json_object"}, # Structured Outputs ) forecast = json.loads(response.choices[0].message.content)
Чотири речі, які тут важливі:
- Мінімум 90 днів історії. Менше — модель не вловить тижневу й місячну сезонність. Більше 180 — зазвичай зайве, старі патерни вже не релевантні.
- Контекст про день тижня. Без цього GPT видасть рівний прогноз на всі дні. Це найчастіша помилка.
temperature=0.2. Для прогнозування потрібна стабільність, не креативність.0.2— оптимально.0.0дає занадто «впевнені» цифри без варіативності.- GPT-4o, не mini. Для прогнозування різниця суттєва. GPT-4o mini гірше враховує складний контекст (свята + курс + день тижня одночасно). Різниця в ціні: ~$0.03 проти ~$0.005 за один прогноз. За місяць — близько $1 проти $0.15. Воно того варте.
Крок 3: порівнюємо прогноз із фактом
Прогноз без зворотного зв'язку — марний. Потрібно регулярно порівнювати, що модель передбачила і що сталося насправді. Це називається backtesting.
def backtest_forecast(predicted: float, actual: float) -> dict: error_pct = abs(predicted - actual) / actual * 100 if error_pct <= 10: status = "good" elif error_pct <= 20: status = "acceptable" else: status = "poor" return { "predicted": predicted, "actual": actual, "error_pct": round(error_pct, 1), "status": status, }
Раз на тиждень скрипт порівнює прогноз із фактом і додає запис у Google Таблицю. За місяць ви бачите реальну точність: «за липень середня похибка — 12%, у 80% днів прогноз потрапив у ±15%». Якщо точність падає — щось змінилося в бізнесі (нова категорія товарів, зміна аудиторії). Це сигнал оновити prompt або додати новий контекст.
Крок 4: доставляємо прогноз у Telegram
BOT_TOKEN = "ваш_токен" CHAT_ID = "ваш_чат" text = f"📈 *Прогноз на {days_ahead} днів*\n\n" for day in forecast["forecast"]: emoji = "🟢" if day["confidence"] == "high" else "🟡" if day["confidence"] == "medium" else "🔴" text += f"{emoji} {day['date']}: {day['revenue']:,} грн, {day['orders']} замовлень\n" text += f"\n{forecast['summary']}" requests.post( f"https://api.telegram.org/bot{BOT_TOKEN}/sendMessage", json={"chat_id": CHAT_ID, "text": text, "parse_mode": "Markdown"}, )
Українська специфіка: що враховувати
Стандартні forecasting-моделі нічого не знають про український контекст. Ось що доводиться додавати в prompt вручну:
1. Курс валют
Для бізнесів, прив'язаних до долара чи євро (електроніка, імпорт, логістика), курс — це головний драйвер середнього чека. Підтягуйте актуальний курс через Monobank API або ПриватБанк API (безкоштовно) і передавайте в контекст прогнозу. Коливання на 1–2% на день — норма. На 5% — привід для окремого сценарію.
# Отримання курсу USD/UAH через Monobank API (без токена) resp = requests.get("https://api.monobank.ua/bank/currency") rates = resp.json() usd_uah = next(r for r in rates if r["currencyCodeA"] == 840 and r["currencyCodeB"] == 980) print(f"Купівля: {usd_uah['rateBuy']}, Продаж: {usd_uah['rateSell']}")
2. Свята за українським календарем
Державні свята змінюють тижневий патерн. Модель не знає, що 28 липня — День Української Державності (вихідний), а 24 серпня — День Незалежності. Додавайте перелік свят на місяць уперед у prompt. За нашим досвідом, це підвищує точність прогнозів на святкові дні приблизно на 25–30%.
3. Відключення світла
У 2026 році це все ще фактор. Якщо у вас офлайн-бізнес або склад без генератора — день без світла може дати падіння на 50–70%. Якщо є генератор — навпаки, конкуренти без світла втрачають клієнтів, а ви отримуєте приріст. Додавайте цей параметр у prompt як бінарний фактор: power_outage_risk: low|medium|high.
Скільки це коштує
Ось цифри для одного джерела даних і щоденного прогнозу:
| Компонент | Вартість/міс | |-----------|-------------| | GPT-4o (30 прогнозів × ~$0.03) | ~$1 | | Python-скрипт (cron щодня) | $0 | | Google Sheets API (історія) | $0 | | Monobank API (курс) | $0 | | Telegram Bot API (доставка) | $0 | | VPS (Hetzner/HostPro, 2 vCPU) | $15–25 | | Разом | $16–26/міс |
Порівняйте: data scientist в Україні — від $2000/міс. Навіть якщо взяти найдорожчий сценарій із GPT-4o замість mini, це в 75 разів дешевше. І прогноз приходить щоранку, а не раз на місяць у PowerPoint.
Обмеження — чесно
AI-прогнозування не всесильне. Ось що воно не робить:
-
Не передбачає чорних лебедів. Курс стрибнув на 10% за день через політичну подію — модель цього не знала. У таких випадках прогноз буде неточним. Це ок.
-
Не працює без історії. Якщо у вас менше 30 днів даних — навіть не пробуйте. Потрібно мінімум 60–90 днів для прийнятної точності.
-
Потребує калібрування. Перші два тижні прогнози будуть гіршими, ніж через місяць. Ви додаєте контекст, дивитесь на backtest-результати, коригуєте prompt. Це не «ввімкнув і забув». Це «ввімкнув і раз на тиждень дивишся на точність».
-
Точність падає з горизонтом. На 3 дні вперед — у межах 10–15% похибки. На 7 днів — 15–20%. На 14 днів — 25–30%. Для бізнес-рішень достатньо 7 днів. Планувати на місяць уперед через GPT-4o — не варто.
З чого почати вже сьогодні
День 1. Відкрийте Google Таблицю з продажами за останні 3 місяці. Якщо даних немає в одному місці — зберіть. Це найважча частина. Без цих даних усе інше не має сенсу.
День 2. Отримайте API-ключ OpenAI. Поповніть баланс на $5. Цього вистачить на 3–4 місяці щоденних прогнозів.
День 3. Скопіюйте код із цієї статті. Замініть fetch_sales_history() на ваші дані. Запустіть перший прогноз. Подивіться на результат.
День 4–7. Налаштуйте контекст: додайте свята, курс, особливості вашого бізнесу. Порівняйте прогноз із реальністю.
Тиждень 2. Автоматизуйте: запустіть скрипт через cron, підключіть Telegram-сповіщення.
Через два тижні у вас є робочий прогнозний пайплайн. Через місяць — відкалібрована система з виміряною точністю.
Хочете швидше? Напишіть нам — подивимось на ваші дані, зберемо пайплайн і запустимо перший прогноз. Перша консультація безкоштовна.
Команда AIRINEX
← Всі статті