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
@JaszczompPolownik: Właśnie na 90% urządzeń jest takie sortowanie, właśnie według wielkości stacji. Na pozostałych 10% zauważyłem, że tez się sortuje, ale zupełnie w druga stronę (najmniejsze na górze). Poszukuję przyczyny błędu i zdecydowanie jedna z rzeczy do naprawy w pierwszej kolejności.
@xGreatx: Tak jak wyżej odpisałem, właśnie jest, ale nie działa na wszystkich urządzeniach. Dodawanie opcji do drop-downa odbywa się na poziomie JavaScripta i możliwe, że tutaj potrzeba poprawy. Na pewno sortowanie najpierw według wielkości stacji, a potem alfabetycznie jest jednym z priorytetów na ten moment.
@fancywire: ten pomysł jest właśnie w trakcie developmentu. Aktualnie pracuję nad implementacją topografii linii kolejowych, tak aby informacja była dla modelu jak najbardziej wartościowa. Wtedy
predykcje będą w 100% w czasie rzeczywistym. Ciężko powiedzieć kiedy uda mi się to skończyć, ale zdecydowanie to jedna z rzeczy, które chciałbym wdrożyć niedługo.
@Urajah: Dzięki za opinię! Zobaczę co da się zrobić, bo do wyszukiwania korzystam z zewnętrznej biblioteki. Zobaczę, co mogę w niej zmienić, żeby działało to tak jak mówisz.
@ajgoron: Tak jak wspomniałem wyżej. Większość wszystkiego to Python, aplikacja Django, baza Postgres. Wszystko co związane z ML - AWS Sagemaker. Plus kilka usług do instrumentalizacji, analizy logów itp.
@FaterAnona: R2 to zły wskaźnik tutaj, gdyż jest to de facto model klasyfikacyjny, który ma wskazać jeden z czterech klas opóźnień. Jako, że klasy są niezbilansowane (ok. 82% pociągów w zbiorze treningowym było opóźnionych 0-4 minut), stosuję tzw. balanced accuracy score czy też balanced F1 score do porównywania jakości modeli.
@Yahto: O widzisz, to juz nie musisz go robić :D Tak na serio, jak miałeś jeszcze jakieś inne pomysły, albo niektóre kwestie chciałeś rozwiązać inaczej i chciałbyś się podzielić, to chętnie posłucham!
@grad: ja jeszcze myślałem o wizualizacji opóźnień na mapie czyli taka np heatmapa na której widać że na stacji Katowice główne dzisiaj średnio prognozujemy 15 min opóźnienia, albo nie tyle na stacji co na danej trasie np. Katowice - Zwardoń. Oprócz tego alerty na maila/powiadomienia gdy dla danej trasy w danych godzinach pojawia się większe prawdopodobieństwo opóźnienia :-)

Nawiązując do komentarza wyżej. Też miałem zwieche na Brave.
@KombajnemPrzezUkraine: nie wiem co dokładnie masz na myśli przez słowo skorelowane, ale model wykorzystuje dane pogodowe w tym m.in temperaturę powietrza, temperaturę punktu rosy, prędkość wiatru, opady deszczu i śniegu. Do predykcji brane są pod uwagę prognozy powyższych wartości na kolejny dzień kursu pociągu.
Jako, że klasy są niezbilansowane (ok. 82% pociągów w zbiorze treningowym było opóźnionych 0-4 minut), stosuję tzw. balanced accuracy score czy też balanced F1 score do porównywania jakości modeli


@grad: dlaczego nie zbalansujesz zbiorow?