Jak przewidzieć, kiedy nastąpi następne zdarzenie na podstawie poprzednich zdarzeń? [zamknięte]

Zasadniczo mam dość dużą listę (dane o wartości rocznej) czasów, w których wystąpiło pojedyncze dyskretne Zdarzenie (dla mojego obecnego projektu, lista czasów, w których ktoś coś wydrukował). Na podstawie tej listy chciałbym skonstruować pewnego rodzaju model statystyczny, który będzie przewidywał najbardziej prawdopodobny czas następnego zdarzenia (następnego zadania drukowania) biorąc pod uwagę wszystkie poprzednie czasy zdarzeń.

Już czytałem to , ale odpowiedzi nie bardzo pomagają w tym, co mam z myślą o moim projekcie. Zrobiłem kilka dodatkowych badań i okazało się, że Ukryty Model Markowa prawdopodobnie pozwoli mi to zrobić dokładnie, ale nie mogę znaleźć linku, jak wygenerować Ukryty Model Markowa za pomocą tylko listy razy. Odkryłem również, że użycie filtra Kalmana na liście może być przydatne, ale w zasadzie chciałbym uzyskać więcej informacji na ten temat od kogoś, kto faktycznie z nich korzystał i zna ich ograniczenia i wymagania, zanim po prostu spróbuje czegoś i ma nadzieję, że to działa.

Wielkie dzięki!

EDIT: więc zgodnie z sugestią Amita w komentarzach, zamieściłem to również w Statistics StackExchange, Crossvalided . Jeśli wiesz, co powinienem zrobić, napisz tutaj lub tam

Author: Community, 2011-09-30

6 answers

Przyznam, że nie jestem typem statystyka. Ale miałem już takie problemy. Tak naprawdę mówimy o tym, że macie jakieś zaobserwowane, dyskretne zdarzenia i chcecie dowiedzieć się, jak prawdopodobnie to jest to, że zobaczycie je w dowolnym momencie w czasie. Problem, który masz polega na tym, że chcesz wziąć dane dyskretne i zrobić z nich dane ciągłe.

Termin, który przychodzi na myśl to oszacowanie gęstości . Konkretnie gęstość jądra oszacowanie . Można uzyskać niektóre z efektów estymacji gęstości jądra przez proste binning (np. policzyć liczbę zdarzeń w przedziale czasu, takich jak co kwadrans lub godzinę.) Estymacja gęstości jądra ma tylko kilka ładniejszych właściwości statystycznych niż proste binning. (Wytworzone dane są często "płynniejsze".)

To rozwiązuje tylko jeden z twoich problemów. Kolejny problem jest jeszcze o wiele ciekawszy . jak wziąć linię czasową danych (w tym przypadku tylko dane drukarki) i wyprodukował prognozę z niego? Po pierwsze: sposób, w jaki skonfigurowałeś problem, może nie być tym, czego szukasz. Podczas gdy cudowny pomysł posiadania ograniczonego źródła danych i przewidywania następnego kroku tego źródła brzmi atrakcyjnie, o wiele bardziej praktyczne jest zintegrowanie większej liczby źródeł danych w celu stworzenia rzeczywistej prognozy. (np. może drukarki mocno uderzają zaraz po dużej aktywności telefonu - coś, co w niektórych firmach może być bardzo trudne do przewidzenia) Wyzwanie Netflix jest dość silnym przykładem tego punktu.

Oczywiście problem z większą liczbą źródeł danych polega na tym, że istnieje dodatkowa praca, aby skonfigurować systemy, które zbierają dane.

Szczerze mówiąc, uznałbym to za problem specyficzny dla domeny i przyjąłbym dwa podejścia: Znajdź wzorce niezależne od czasu i znajdź wzorce zależne od czasu.

Przykładowy wzorzec zależny od czasu byłby taki, że co tydzień o 4:30 Suzy drukuje raport końca dnia. Dzieje się tak w konkretne godziny każdego dnia tygodnia. Tego rodzaju rzeczy są łatwe do wykrycia z ustalonymi interwałami. (Każdego dnia, każdego tygodnia, każdego weekendu, każdego wtorku, każdego 1 dnia miesiąca, itp...) Jest to niezwykle proste do wykrycia z góry ustalonymi interwałami - wystarczy utworzyć krzywą szacowanej funkcji gęstości prawdopodobieństwa, która trwa jeden tydzień i cofnąć się w czasie i uśrednić krzywe (ewentualnie średnią ważoną za pomocą funkcji okien dla lepszych prognoz).

Jeśli chcesz uzyskać bardziej wyrafinowane, znaleźć sposób, aby zautomatyzować wykrywanie takich interwałów. (Prawdopodobnie dane nie byłyby tak przytłaczające, że można by to po prostu brutalnie wymusić.)

Przykładowy wzorzec niezależny od czasu jest taki, że za każdym razem, gdy Mike w księgowości drukuje arkusz listy faktur, przechodzi do Johnathana, który drukuje dość dużą partię kompletnych raportów faktur kilka godzin później. Tego rodzaju rzeczy są trudniejsze do wykrycia, ponieważ są bardziej swobodne. Polecam zajrzeć w różne interwały czasu (np. 30 sekund, 40 sekund, 50 sekund, 1 minutę, 1,2 minuty, 1,5 minuty, 1,7 minuty, 2 minuty, 3 minuty, .... 1 godzina, 2 godziny, 3 godziny,....) i podpróbkowanie ich w ładny sposób (np. Lanczos resampling ) w celu utworzenia wektora. Następnie użyj algorytmu kwantyzacji wektorowej do kategoryzowania "interesujących" wzorców. Musisz jednak dokładnie przemyśleć, jak sobie radzisz z pewnymi kategoriami - jeśli twoja Kategoria A ma bardzo mało dane w nim, to prawdopodobnie nie jest wiarygodne. (Niektóre algorytmy kwantyzacji wektorowej są w tym lepsze niż inne.)

Następnie, aby stworzyć prognozę co do prawdopodobieństwa wydrukowania czegoś w przyszłości, Sprawdź najnowsze interwały aktywności (30 sekund, 40 sekund, 50 sekund, 1 minutę i wszystkie inne interwały) poprzez kwantyzację wektorową i oceń wyniki na podstawie ich pewności, aby utworzyć średnią ważoną prognoz.

Będziesz chciał znaleźć dobry sposób na pomiar pewność wyników zależnych od czasu i niezależnych od czasu w celu stworzenia ostatecznego oszacowania.

Tego typu rzeczy są typowe dla predykcyjnych schematów kompresji danych. Polecam rzucić okiem na PAQ , ponieważ ma wiele pojęć, które tutaj omówiłem i może dostarczyć bardzo interesującego wglądu. Kod źródłowy jest nawet dostępny wraz z doskonałą dokumentacją stosowanych algorytmów.

Możesz chcieć przyjąć zupełnie inne podejście niż wektor kwantyzacji i dyskrecji danych i używać czegoś bardziej jak ppm schemat. Może być o wiele prostszy do wdrożenia i nadal skuteczny.

Nie wiem, jakie są ramy czasowe lub zakres tego projektu, ale tego typu rzeczy zawsze można wziąć do N-tego stopnia. Jeśli ma termin, chciałbym podkreślić, że najpierw martwisz się, że coś zadziała, a potem spraw, aby działało dobrze. Coś nie optymalnego jest lepsze niż nic.

Tego typu projekt jest cool . Ten rodzaj projektu może dać ci pracę, jeśli dobrze ją zakończysz. Polecam nie spiesz się, zrób to dobrze i opublikuj to jako funkcję, open source, przydatne oprogramowanie. Gorąco polecam open source, ponieważ będziesz chciał stworzyć społeczność, która może przyczynić się do dostawców źródeł danych w większej liczbie środowisk, do których masz dostęp, chęć wsparcia lub czas na wsparcie.

Powodzenia!

 6
Author: Kaganar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-01 17:11:24

Naprawdę nie widzę, jak model Markowa mógłby się tutaj przydać. Modele Markowa są zazwyczaj stosowane, gdy przewidywane Zdarzenie zależy od poprzednich zdarzeń. Kanonicznym przykładem jest oczywiście tekst, w którym dobry model Markowa potrafi zaskakująco dobrze odgadnąć, jaki będzie następny znak lub słowo.

Ale czy istnieje schemat, kiedy użytkownik może wydrukować następną rzecz? To znaczy, czy widzisz regularny schemat czasu między zadaniami? Jeśli tak, to model Markowa zadziała. Jeśli nie, to model Markowa będzie przypadkowym zgadywaniem.

W jaki sposób go modelować, pomyśl o różnych okresach czasu między zadaniami jak o literach w alfabecie. W rzeczywistości można przypisać za każdym przedziałem czasowym literę, coś w stylu:

A - 1 to 2 minutes
B - 2 to 5 minutes
C - 5 to 10 minutes
etc.

Następnie przejrzyj Dane i przypisz literę do każdego okresu pomiędzy zadaniami drukowania. Gdy skończysz, masz tekstową reprezentację danych i możesz uruchomić dowolny z przykładów Markova, który przewiduje tekst.

 1
Author: Jim Mischel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-30 23:29:52

Jeśli masz rzeczywisty model, który Twoim zdaniem może być istotny dla domeny problemu, powinieneś go zastosować. Na przykład, jest prawdopodobne, że istnieją Wzorce związane z dniem tygodnia, porą dnia i ewentualnie datą (święta prawdopodobnie wykazywałyby mniejsze użycie).

Większość surowych technik modelowania statystycznego opartych na badaniu (powiedzmy) czasu między sąsiednimi zdarzeniami miałyby trudności z uchwyceniem tych podstawowych wpływów.

Zbudowałbym model statystyczny dla każdego z tych znanych zdarzeń (dzień tygodnia, itp.) i wykorzystaj je do przewidywania przyszłych zdarzeń.

 1
Author: Mike Sokolov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-01 01:09:18

Pomyśl o łańcuchu Markowa jak o wykresie z wierzchołkami łączącymi się ze sobą wagą lub odległością. Poruszanie się po tym wykresie pochłonie sumę ciężarów lub odległości, którą podróżujesz. Oto przykład z generowaniem tekstu: http://phpir.com/text-generation .

 0
Author: Bytemain,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-30 20:09:17

Filtr Kalmana jest używany do śledzenia wektora stanu, zwykle o ciągłej (lub przynajmniej dyskretnej ciągłej) dynamice. Jest to swego rodzaju przeciwieństwo sporadycznych, dyskretnych zdarzeń, więc jeśli nie masz bazowego modelu, który zawiera tego rodzaju wektor stanu (i jest liniowy lub prawie liniowy), prawdopodobnie nie chcesz filtra Kalmana.

Wygląda na to, że nie masz modelu bazowego, a łowisz po jednym: masz gwóźdź i przechodzisz przez toolbox testowanie plików, wkrętaków i miar taśmowych 8^)

Moja najlepsza rada: najpierw użyj tego, co wiesz o problemie, aby zbudować model; następnie dowiedz się, jak rozwiązać problem, na podstawie modelu.

 0
Author: comingstorm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-01 01:25:37

Myślę, że predykcyjna sieć neuronowa byłaby dobrym podejściem do tego zadania. http://en.wikipedia.org/wiki/Predictive_analytics#Neural_networks

Ta metoda jest również używana do przewidywania f. X. prognozowania pogody, oznaczania zapasów, plam słonecznych. Jest tu samouczek, jeśli chcesz dowiedzieć się więcej o tym, jak to działa. http://www.obitko.com/tutorials/neural-network-prediction/

 0
Author: Kunukn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-01 16:52:03