Wpis z mikrobloga

Jakieś dwa lata temu chwaliłem się stworzeniem strony archiwizującej opóźnienia pociągów PKP i generującej proste prognozy opóźnienia na kolejny dzień.

Dziś chwalę się drugi raz, bo zaktualizowałem serwis do wersji 2.0 (na razie w wersji beta). Wersja ta zawiera dużo nowych funkcjonalności, całkowicie nowy UI oraz stworzony od podstaw model machine learning prognozujący opóźnienia pociągów na podstawie szeregu czynników, w tym opóźnień z poprzednich dni, różnych cech pociągu oraz danych pogodowych. Co więcej, model podaje również listę najważniejszych czynników na podstawie których wygenerował daną prognozę (starałem się, aby model był "interpretowalny").

W skrócie, na stronie "Czy pociąg się spóźni?" sprawdzicie:
- historyczne opóźnienia zdecydowanej większości (jeśli nie wszystkich) pociągów krajowych (do 30 dni wstecz)
- aktualne opóźnienia - poglądowo (opóźnione ok. 10-50 min w stosunku do Infopasażera)
- prognozowane opóźnienia - na kolejny kurs pociągu

Serdecznie zapraszam do wypróbowania na https://www.czypociagsiespozni.pl i podzielenie się feedbackiem!

#pkp #pociagi #pociag #chwalesie #sztucznainteligencja #machinelearning #programowanie
  • 59
@jabl: Pewnie! Inspiracją do projektu był projekt Infopasażer Archiver (http://ipa.lovethosetrains.com/) oraz powiązane z nim repozytorium https://github.com/tmaciejewski/ipa. Moja część to modyfikacje kodu tak, aby działał efektywniej i pobierał dane dla wszystkich, albo przynajmniej zdecydowanej większości pociągów, modelowanie danych oraz opakowanie wszystkiego w jak najbardziej przyjazny użytkownikowi UI.

Sam serwis jest oparty na Django + baza w Postgresie. Zintegrowany jest z Infopasażerem poprzez wspomnianą wyżej i zmodyfikowaną bilbiotekę ipa, a także zintegrowany
@cohontes: Obecny model został wytrenowany na danych obejmujących okres 24 miesięcy i staram się utrzymać ten interwał chociażby po to, żeby model "nauczył się" interpretować miesiące czy też pory roku. Chociaż oczywiście to nie jest koniec i będę próbował też innych podejść.

Sprawdzam na bieżąco faktyczną realizację prognoz (generuję prognozy na wszystkie kombinacje pociąg+stacja) na około północy i sprawdzam potem w trakcie dnia jaki performance miał model na rzeczywistych opóźnieniach. Jeśli
Długość trasy pociągu do momentu zatrzymania na tej stacji (0.8 h)

@grad: Nie czaje tego opisu. I czemu 0.8h skoro prawie wszystko inne jest podane w minutach?
@pwone: Chodzi tutaj o to, jak długo jedzie pociąg zanim przyjedzie do stacji którą wybrałeś (licząc od stacji początkowej). Generalnie czym „dalej” dana stacja jest od stacji początkowej pociągu, tym większe (z reguły) jest ryzyko opóźnienia, bo więcej opóźnienia pociąg może nabrać „na trasie”. Przykładowo, pociąg Warszawa - Szczecin będzie miał wyższe ryzyko opóźnienia na stacji Szczecin niż na stacji Sochaczew (jedna z pierwszych stacji).

Może masz propozycję jak można by
Jeśli chodzi o modelowanie, to po wielu różnych testach zdecydowałem się na model oparty na zbiorze drzew decyzyjnych (w oparciu o bibliotekę XGBoost),


@grad: jakie R^2 wariacie?
@grad: a czy strona uwzględnia przyczynę opóźnień jako inne pociągi opóźnione przecinające trasę albo odjeżdżające z miast wojewódzkich? Bo predykcja opóźnień na podstawie opóźnień to ślepa uliczka, tu trzeba analizować rzeczy w czasie rzeczywistym
opakowanie wszystkiego w jak najbardziej przyjazny użytkownikowi UI.


@grad: Na rany Chrystusa, ale weź przy wyszukiwaniu stacji posegreguj to po wielkości miasta. Masz wyżej przykład gdzie po wyszukaniu łodzi nie ma jej nawet w pobliżu pierwszego miejsca.