

Projekt “Księżyc” został odłożony na chwilę na półkę, ale nie próżnowałem w tym czasie. Wziąłem udział w kursie Praktyczne Uczenie Maszynowe organizowanym przez dataworkshop.eu
Kurs oceniam pozytywnie, przeprowadził dosyć sprawnie przez dużą część spektrum Machine Learningu. Szkolenie trwało 8 tygodni, można w nim wyróżnić dwie części — klasyczne algorytmy (regresja, drzewa, feature engineering) oraz sieci neuronowe (zwykłe, konwolucyjne, transfer learning). Dodatkowym elementem kursu, były cotygodniowe webinary, w których oprócz odpowiedzi na pytania uczestników prowadzący starał się zmotywować uczestników do pracy nad sobą (nie tylko w zakresie ML), oraz dawał wsparcie psychologiczne.
Co dla mnie okazało się najważniejsze, pomiędzy częścią klasyczną a sieciami neuronowymi, dla uczestników kursu, został przeprowadzony konkurs z nagrodami. Konkurs polegał na predykcji cen samochodów osobowych. Już od samego początku miałem plan wziąć udział w tym konkursie i wygrać (głównie po to, żeby sobie udowodnić że się nadaję do ML). Po około 10 dniach wytężonej pracy udało mi się zrealizować ten plan i zająć pierwsze miejsce 🙂
Moje rozwiązanie można podejrzeć na githubie. Opowiadałem o nim również podczas webinaru podsumowującego konkurs dostępnego na youtube, prezentacja z webinaru jest dostępna tutaj.
Nie będę się tutaj powtarzał, jak wyglądała moja droga do wygranej, jednak mam kilka wniosków, którymi warto się podzielić:
- Nie warto trzymać się jednego modelu — gdybym nie spróbował catboost, pierwsze miejsce byłoby prawdopodobnie nie do osiągnięcia
- Nie można wierzyć danym — to co dostaliśmy do konkursu było słabej jakości, 30% czasu straciłem na doprowadzenie danych do używalnego stanu. Wiele z parametrów miało kosmiczne wartości (np pojemność silnika kilkadziesiąt litrów w zwykłym kompakcie), zdarzały się też wiersze zupełnie puste. Nie mogłem usunąć tych nieprawidłowych danych, ponieważ występowały one zarówno w zbiorze uczącym jak i treningowym.
- Warto zrobić sobie plan na początku, ale nie warto się jego trzymać. Pierwszego dnia rozpisałem sobie dokładnie co muszę zrobić, przyporządkowałem do poszczególnych dni tygodnia. Pierwotny plan zrealizowałem w 30%, wiele rzeczy wypadło lub doszło w trakcie, ale dzięki niemu wiedziałem co jeszcze muszę zrobić i kiedy muszę pewne rzeczy odpuścić, tak żeby zdążyć przed końcem konkursu.
- Kontrola wersji przy “eksperymentowaniu” jest bardzo ważna i bardzo trudna. Pół dnia straciłem przez to, że coś popsułem i nie umiałem wrócić do poprzedniego punktu. Dobrym pomysłem wydaje się być to, co zaproponowała w webinarze konkursowym Maja — oddzielne wersjonowanie części przerabiającej dane i części modelowej.
- Algorytmy “drzewiaste” są strasznie losowe. Dzięki catboost udało mi się trochę od tego uciec, ale odkryłem, że takie coś jak zmiana kolejności zmiennych może znacząco wpłynąć na wynik.
- Niektóre cechy są “głupie”, ale działają. Nie zawsze zdrowy rozsądek jest tym co się sprawdza najlepiej.
Konkurs to była dla mnie prawdziwa przygoda i możliwość sprawdzenia się pod presją. Dzięki niemu mogłem wyjść z trybu gdzie tylko pochłaniam wiedzę i robię wszystkiego na 100% poprawnie, i w końcu zająć się rozwiązywaniem prawdziwych problemów w praktyczny sposób.