Сколько времени требуется для достижения определенного значения?

Возможность делать точные прогнозы является фундаментальной для любого приложения для прогнозирования временных рядов. Следуя этой цели, специалисты по данным привыкли выбирать лучшие модели, которые сводят к минимуму ошибки с точки зрения точечного прогноза. Это правильно, но не всегда может быть лучшим эффективным подходом.

Специалистам по данным следует также рассмотреть возможность разработки моделей вероятностного прогнозирования. Эти модели вместе с точечными оценками дают также верхний и нижний диапазоны достоверности, в которые, вероятно, попадают будущие наблюдения. Несмотря на то, что вероятностное прогнозирование кажется прерогативой статистических решений или решений глубокого обучения, любая модель может использоваться для получения вероятностные прогнозы. Концепция объясняется в одном из моих предыдущих постов, где я представил конформное прогнозирование как способ оценки интервалов прогнозирования с любыми моделями scikit-learn.

Конечно, точечный прогноз значительно легче передать нетехническим заинтересованным сторонам. В то же время возможность генерировать KPI по надежности наших прогнозов является дополнительным преимуществом. Вероятностный вывод может содержать больше информации для поддержки принятия решений. Сообщение о том, что вероятность дождя в ближайшие часы составляет 60%, может быть более информативным, чем сообщение о том, сколько миллиметров дождя выпадет.

В этом посте мы предлагаем метод прогнозирования, известный как прогнозирование времени попадания, используемый для оценки того, когда произойдет определенное событие или условие. Он оказался точным, поскольку основан на конформном прогнозировании, интерпретируемым, поскольку имеет вероятностную интерпретируемость, и воспроизводимым с любым методом прогнозирования.

Введение в прогнозирование времени попадания

Прогнозирование времени попадания – это концепция, обычно используемая в различных областях. Это относится к прогнозированию или оценке времени, которое требуется для возникновения определенного события или условия, часто в контексте достижения определенного порога или уровня.

Наиболее известные приложения времени попадания относятся к таким областям, как анализ надежности и анализ выживаемости. Он включает в себя оценку времени, которое требуется системе или процессу для возникновения определенного события, такого как сбой или достижение определенного состояния. В финансах время достижения часто применяется для определения вероятности того, что сигнал/индекс будет следовать в желаемом направлении.

В целом, прогнозирование времени попадания включает в себя прогнозирование времени, которое потребуется для конкретного события, которое следует за временной динамикой.

От точечного к вероятностному прогнозированию

Чтобы правильно оценить время попадания, мы должны начать с точечного прогнозирования. В качестве первого шага мы выбираем желаемый алгоритм прогнозирования. В этой статье мы используем простой рекурсивный оценщик, доступный в стиле scikit-learn от tspiral.

model = ForecastingCascade(
    Ridge(),
    lags=range(1,24*7+1),
    use_exog=False,
)

Наша цель — создать прогнозные распределения для каждой прогнозируемой точки, из которых можно извлечь вероятностные данные. Это делается в соответствии с трехэтапным подходом и использованием теории конформного прогнозирования:

  • Прогнозы собираются на обучающем наборе посредством перекрестной проверки, а затем усредняются.
CV = TemporalSplit(n_splits=10, test_size=y_test.shape[0])

pred_val_matrix = np.full(
    shape=(X_train.shape[0], CV.get_n_splits(X_train)),
    fill_value=np.nan,
    dtype=float,
)

for i, (id_train, id_val) in enumerate(CV.split(X_train)):
    
    pred_val = model.fit(
        X_train[id_train], 
        y_train[id_train]
    ).predict(X_train[id_val])
    
    pred_val_matrix[id_val, i] = np.array(
        pred_val, dtype=float
    )

pred_val = np.nanmean(pred_val_matrix, axis=1)
  • Показатели соответствия рассчитываются на основе обучающих данных как абсолютные остатки от перекрестно проверенных прогнозов и реальных значений.
conformity_scores  = np.abs(
    np.subtract(
        y_train[~np.isnan(pred_val)], 
        pred_val[~np.isnan(pred_val)]
    )
)
  • Будущие распределения прогнозов получаются путем добавления оценок соответствия к тестовым прогнозам.
pred_test = model.fit(
    X_train, 
    y_train
).predict(X_test)

estimated_test_distributions = np.add(
    pred_test[:, None], conformity_scores
)

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

От вероятностного к прогнозированию времени попадания

Для каждого момента времени в будущем записывается сколько раз значения в оценочных тестовых распределениях превышают заданный порог (наш целевой уровень достижения). Этот подсчет преобразуется в вероятность, просто нормируемую по количеству значений в каждом оценочном тестовом распределении.

Наконец, к массиву вероятностей применяется преобразование, чтобы получить ряд монотонно возрастающих вероятностей.

THRESHOLD = 40

prob_test = np.mean(estimated_test_distributions > THRESHOLD, axis=1)

prob_test = pd.Series(prob_test).expanding(1).max()

Какое бы событие мы ни пытались предсказать, мы можем создать кривую вероятностей, просто исходя из точечных прогнозов. Интерпретация остается простой, т. е. для каждого прогнозируемого момента времени мы можем вывести вероятность того, что наш целевой ряд достигнет заданного уровня.

Краткое содержание

В этом посте мы представили способ предоставления вероятностных результатов для наших моделей прогнозирования. Это не требует применения странных и интенсивных дополнительных методов оценки. Просто начав с задачи точечного прогнозирования, можно добавить вероятностный обзор задачи, применив метод времени попадания.

ПРОВЕРЬТЕ МОЙ РЕПО GITHUB

Оставайтесь на связи: Linkedin