Подгонка параметра скорости как функции времени для одной реализации неоднородного пуассоновского процесса - PullRequest
0 голосов
/ 22 января 2019

У меня есть несколько наборов данных (разные типы самолетов).Каждый из них имеет список единиц времени (общее количество летных часов флота) и список событий (аварий), которые произошли в каждом интервале времени между единицами времени.Частота возникновения событий со временем уменьшается (обычно), поэтому я рассматриваю это как неоднородный пуассоновский процесс.Я точно не знаю, какова функциональная форма частоты возникновения, но в настоящее время я отношусь к ней как к экспоненциально убывающей (a * e ^ (- b * t)).

Я пытаюсь извлечь из этого две вещи:

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

2) Уметь прогнозировать, сколько будущих событий (аварий) произойдет для новых типов самолетов в зависимости от единиц времени (летных часов).Например, если Boeing 797 появится в 2030 году, я хочу предсказать, сколько самолетов потерпит крушение, когда вы увеличите количество летных часов.Это требует подгонки «a» и «b», чтобы я мог видеть, как эти параметры меняются в зависимости от свойств моего набора данных (например, даты запуска самолета, компании, количества двигателей и т. Д.).Мне также нужны хорошие индикаторы ошибок для этих значений, которые учитывают любую корреляцию параметров.

Все мои данные находятся на компьютере, не подключенном к Интернету, поэтому я прошу прощения за любые мелкие опечатки:

t=[1.95e-03, 7.38e-03, 3.414e-02, 1.1773e-01, 3.147e-01, 5.757e-01, 
   8.4279e-01, 1.076, 1.345, 1.649, 1.942, 2.219, 2.483, 2.731, 2.969, 3.197, 
   3.444, 3.691, 3.952, 4.162, 4.440, 4.655, 4.851, 5.092, 5.316, 5.540, 5.768, 
   6.003, 6.291, 6.538, 6.755, 6.981, 7.113, 7.223] # Flying hours / 100,000
events=[1, 0, 0, 1, 0, 2, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 
        0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0]
totalevents=[1, 1, 1, 2, 2, 4, 4, 4, 4, 5, 5, 5, 5, 6, 7, 7, 7, 7, 8, 8, 8, 
             8, 8, 8, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10] 

Поскольку мне нужны сильные диапазоны ошибок, я пытался использовать pymc3 для подгонки MCMC, но, видимо, я неправильно понял, что делал.Я думал, что подгонка MCMC даст мне хорошее (a, b) соединение.Затем я мог бы включить их в формулу Пуассона, чтобы получить распределение ожидаемого числа будущих событий (сбоев) с диапазонами ошибок.Я мог бы также использовать среднее значение «a» и «b» для решения моей проблемы № 2.

Это то, что я пытался.Это не дало мне того, что я хотел.

import pymc3 as pm
import numpy as np
with pm.Model() as model:
    a=pm.TruncatedNormal(name='a', mu=1, sd=1, lower=0)  # Random guesses for mu, sd
    b=pm.Normal(name='b', mu=1, sd=1) # Random guesses for mu, sd
    lam=pm.Deterministic('lam', a*np.exp(-b*t))
    count=pm.Poisson(mu=lam, name='count', observed=events)
    trace=pm.sample(10000, chains=4, tune=1000)

Я знаю, что у меня есть концептуальные ошибки, но я просто не могу понять, как делать то, что я хочу.Альтернативой является подгонка степенного закона времени (кумулятивных летных часов) к кумулятивным событиям (кумулятивным авариям), получение одного значения для «a» и «b» для каждого типа самолета, а затем моделирование будущих аварий с помощью формулы Пуассона,но я чувствую, что оба выкидывают информацию, что я знаю, что наблюдаемые сбои являются пуассоновскими, и это также не дает мне хороших данных об ошибках начального соответствия.

Могу ли я использовать pymc3 для этогопроблема?Что мне нужно сделать, чтобы получить то, что я хочу?

...