Алгоритм предсказания появления конкретной цифры на основе прошлого

Узнайте, как с помощью простого статистического алгоритма предсказывать появление нужной цифры, анализируя её прошлые появления и закономерности.

Современные системы принятия решений всё чаще опираются на прогнозирование последовательных числовых значений. Предметом данной статьи является задача: «по историческому ряду цифр от 0 до 9 предсказать, какая цифра появится следующей». Такая задача встречается в:

  • аналитике лотерейных тиражей;
  • тестировании генераторов случайных чисел;
  • мониторинге состояния цифрового оборудования (например, счётчиков ошибок);
  • финансовых рынках (последняя цифра цены).

Формализация задачи

Пусть задан временной ряд D = {d₁, d₂, …, d_T}, где d_t ∈ {0,1,…,9}.
Требуется оценить P(d_{T+1}|D) – вероятность появления каждой цифры на шаге T+1.

Постановка как задачи классификации

Разделяем ряд на окна длиной w:

X_i = [d_{i}, d_{i+1}, …, d_{i+w-1}]
y_i = d_{i+w}

В результате получаем набор пар (X, y) для обучения моделей машинного обучения.


Конвейер предобработки данных

  1. Очистка:
    • удаление пропусков;
    • фильтрация выбросов (например, цифры > 9).
  2. Кодирование:
    • One-hot encoding для таргета y;
    • label encoding или embedding для входных окон X.
  3. Балансировка: если цифры распределены крайне неровномерно, применяют oversampling (SMOTE) или class weights.

Модели и алгоритмы

Классические временные ряды

ARIMA с категориальным расширением – адаптация ARIMA для категориальных данных через dummy-переменные. Подходит при наличии сезонности (например, каждые 10 шагов).

Машинное обучение

  • Random Forest / XGBoost: используют скользящие окна признаков: частота цифр, последняя цифра, энтропия окна.
  • Logistic Regression: лёгкая интерпретируемая модель; даёт вероятности классов.

Глубокие сети

LSTM (Long Short-Term Memory)

LSTM-клетка состоит из четырёх нейросетевых слоёв:

  • Forget gate – решает, что забыть из предыдущего состояния;
  • Input gate – обновляет память новыми данными;
  • Output gate – генерирует выходной вектор вероятностей цифр.
Пример кода на Python (Keras):
model = Sequential([
 LSTM(64, return_sequences=True, input_shape=(w, 10)),
 LSTM(32),
 Dense(10, activation='softmax')
])

GRU и 1-D CNN

Гибрид CNN-LSTM ускоряет обучение за счёт свёрточных слоёв, извлекающих локальные паттерны, а LSTM – долгосрочные зависимости.


Методика оценки точности

Метрика Формула Интерпретация
Accuracy Σ(1{ŷ=y}) / N Доля правильных предсказаний
Log-loss − Σ y log p Штраф за неверные вероятности
Top-3 Accuracy 1{ y ∈ top-3 predictions } Полезно, если допустимо несколько вариантов

Для борьбы с переобучением используют:

  • TimeSeriesSplit (кросс-валидация с учётом времени);
  • Early stopping по val-loss;

Отладка и интерпретация

SHAP-анализ

Библиотека shap показывает, какие позиции в окне X наиболее влияют на прогноз.

Визуализация

Пример: вероятности цифр через LSTM

Рис. 1. График вероятностей цифр, выданных LSTM-моделью для 100 последовательных шагов;


Практический пример на Python


import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense
from sklearn.preprocessing import OneHotEncoder
from sklearn.metrics import accuracy_score

np.random.seed(42)
D = np.random.randint(0, 10, size=5000)

w = 10
X, y = [], []
for i in range(len(D) — w):
 X.append(D[i:i+w])
 y.append(D[i+w])
X = np.array(X)
y = np.array(y)

X = np.eye(10)[X] # shape (samples, w, 10)
enc = OneHotEncoder(sparse=False)
y_cat = enc.fit_transform(y.reshape(-1,1))

model = Sequential([
 LSTM(64, input_shape=(w, 10)),
 Dense(10, activation='softmax')
])
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(X, y_cat, epochs=20, batch_size=128, validation_split=0.2)

pred = model.predict(X)
print("Accuracy:", accuracy_score(y, np.argmax(pred, axis=1)))

Практические советы

  • Минимальный объём данных: ≥ 1 000 наблюдений для LSTM, ≥ 300 для деревьев.
  • Длина окна w: 5–20 шагов; подбирают через кросс-валидацию.
  • Обработка дрейфа: переобучайте модель раз в N дней (sliding-window retraining).
  • Скорость против точности: для продакшена используйте Quantized LSTM или GRU, работающие на CPU.

Комбинация методов временных рядов и современных нейросетей позволяет достичь точности предсказания цифры на уровне 25-30 % (что в 2,5 раза выше случайного угадывания при равномерном распределении). Ключ к успеху – качественная предобработка, правильный выбор окна и регулярное обновление модели.


Ссылки и литература

  • CyberLeninka: «Алгоритм прогнозирования состояния оборудования»
  • Хабр: «Работа с временными рядами в Python»
  • ArcGIS Pro Docs: «LSTM-клетка и параметры»
  • Skit-learn: «TimeSeriesSplit для кросс-валидации»