Czy prosta regresja liniowa może pobić na głowę SVM i Random Forest?

Znajomy brał udział w projekcie, w którym na podstawie historii należało wykonać predykcję w przód cechy Y. Problem polegał na tym, że cecha Y wykazywała tendencje do wzrostu. Na potrzeby tego wpisu Y to może być mleczność krów lub zapotrzebowanie na energię czy cokolwiek innego co z czasem średnio rośnie.

Rozmawialiśmy trochę o tym co może się sprawdzić w tego typu analizach. Jako benchmark wykorzystaliśmy współczesne techniki pozwalające na podgrzanie procesora typu lasy losowe czy SVM. Okazuje się jednak (po fakcie, jest to nawet zgodne z intuicją ;-), że jeżeli występuje w miarę stabilny trend to zakres wartości obserwowanych w przyszłości może być inny niż zakres wartości obserwowanych w przeszłości. W tym przypadku techniki takie jak zwykła regresja liniowa mogą dać lepsze wyniki niż wspomniane SVM i RF.

Rozważmy taki przykład. Mamy do dyspozycji N predyktorów, chcemy przewidzieć rozwój cechy Y. W rzeczywistości ta cecha zależy tylko od pierwszego z N predyktorów. W szranki postawimy SVM, RandomForest, regresję liniową i regresję z regularyzacją typu lasso.

Przykład będzie czysto symulacyjny.

Zacznijmy od wylosowania danych, po 100 obserwacji i N=25 predyktorów. Zbiór testowy będzie poza domeną zbioru uczącego, wszystkie zmienne przesuwamy o +1.

Czytaj dalej Czy prosta regresja liniowa może pobić na głowę SVM i Random Forest?

Matematyka, PISA, zajęcia z modeli liniowych i mieszanych

Dziś mamy kolejny gościnny wpis. Tym razem poświęcony analizie danych PISA pod kątem cech korelujących z wynikami testu z matematyki. Dane PISA to źródło wielu ciekawych informacji, pracowaliśmy z nimi podczas poprzednich wakacji z wolontariuszami i będziemy jeszcze nie raz z nimi pracować.

Zanim przejdę do gościnnego wpisu streszczę historię jego powstania. Wiem, że wśród czytelników są osoby zaangażowane/uwikłane w dydaktykę przedmiotów związanych z analizą danych. Mam nadzieję, że dla nich ten rys historyczny będzie ciekawy.

W semestrze zimowym prowadziłem przedmiot dotyczący modelowania z użyciem modeli liniowych i mieszanych. Zaliczenie można było uzyskać na podstawie pięciu projektów. Wszystkie projekty dotyczyły analizy tego samego zbioru danych PISA 2009. Najlepsze wyniki z pierwszego projektu były przedstawiane publicznie, by każdy mógł z nich skorzystać i zrobić coś lepszego na drugim projekcie. Później najlepsze wyniki z drugiego projektu były przedstawiane publicznie tak by każdy mógł z nich skorzystać i zrobić coś lepszego na trzecim projekcie, i tak dalej.
Mamy więc pięć projektów dotyczących tego samego zbioru danych. Celem każdego z projektów jest opisanie, co wpływa na wyniki uczniów z egzaminu z matematyki. Zapisanych było około 20 studentów i wszyscy oni pięciokrotnie podchodzili do tego problemu. W miarę jak na wykładzie pojawiały się coraz bardziej zaawansowane techniki, widać było co nowego dzięki nim możemy odkryć/pokazać w zbiorze danych PISA.
Ostatni projekt polegał na przygotowaniu i przedstawieniu w postaci plakatu struktury zależności pomiędzy zmiennymi.
Mòj plan był prosty. Przez cztery projekty studenci szukali interesujących zależności, a w ostatnim projekcie najciekawsze rzeczy należało podsumować na jednej kartce/plakacie. Idealnie by było, gdyby taki plakat mógł zastąpić kilkudziesięciostronicowy raport z setką wykresów.

Poniżej mam przyjemność przedstawić jeden z lepszych wyników tego eksperymentu. Projekt wykonany przez Barbarę Rubikowską, Jana Gąskę, Krzysztofa Opalskiego i Marcina Wnuka. Prezentacja plakatów była ustna, ale na potrzebę tego bloga autorzy przygotowali krótki opis wyników.

Czytaj dalej Matematyka, PISA, zajęcia z modeli liniowych i mieszanych

Jak wyglądają ceny aut używanych w segmencie C i problemy modelowania

W poprzedni piątek, w tym wpisie, opisałem trzecią wersję zbioru danych o cenach aut używanych.  W trzech najbliższych wpisach przyjrzymy się bliżej temu zbiorowi danych. Wpisy będą znacznie bardziej technicznie niż poprzednie, ale mam nadzieję że ciekawie dla osób zaczynających przygodę z modelowaniem statystycznym.

Dzisiaj przedstawię kilka umiarkowanie złożonych podejść do modelowania ceny samochodu z użyciem modeli liniowych. Będzie kod w R i trochę narzekań na niezrównoważony zbiór danych. Kolejny wpis przedstawiać będzie przykładowe wizualizacje zbioru danych o cenach aut. A w trzecim wpisie przedstawię krótką prezentację wykonaną z użyciem narzędzia dostępnego online na stronie prezi.com. Narzędzie to jest bezpłatne w wersji średniej dla studentów i nauczycieli akademickich. Ciekawe jestem jak wypadnie prezentacja w nim wykonana, czy lepiej niż w Beamerze?

Pomimo iż większość (żmudnej) pracy związanej z wyborem modelu nie zostanie przedstawiona, i tak będzie dzisiaj bardzo technicznie.

Zaznaczę jeszcze, że modelowana jest cena używanego auta a nie zmiana ceny czy spadek wartości. Modelując cenę mogę dodać efekt wieku auta i mówić, że auta o rok starszy są o x PLN tańsze, ale to są inne auta! W innej wersji i innym wyposażeniem. Efekt wyposażenia można jeszcze usunąć ale efektu związanego z wersja nie. Można porównywać średnią cenę Passata z roku 2006 z ceną Passata z roku 2005. Ale z tego porównania nie można wyciągać wniosków co do utraty wartości tego auta. Są to różne wersje, z różnymi problemami estetyki wersji B5 czy problemów wieku młodzieńczego wersji B6. Modelowanie utraty wartości jest tematem ciekawym i wrócimy do tego gdy będziemy mieli ceny aut zebranych rok wcześniej i rok później.

Wybór podzbioru danych – filtrowanie

Zbiór danych o cenach aut z marca 2012 ma ponad 220 tys wierszy. Kusząca jest możliwość wykorzystania wszystkich tych wierszy do modelowania. Kuszące rzeczy często jednak są złe.

Zgodnie ze złotą zasadą ,,garbage in, garbage out” jeżeli do modelu włożymy śmieciowe dane, otrzymamy śmieciowe wyniki. Ponieważ będziemy wykorzystywać dosyć wrażliwe metody estymacji, w pierwszym kroku wyczyścimy zbiór danych tak by zawierał jak najmniej kłopotliwych zmiennych.

Nawet jeżeli czyszczenie danych jest dosyć żmudne, mało widowiskowe i potrafi zabrać więcej czasu niż cała reszta wizualizacji i modelowania to i tak jest to jeden z ważniejszych kroków. Co z tego, że użyjemy super wyrafinowanej metody estymacji skoro w danych mamy śmieci?

W tym przypadku proces czyszczenia danych polegał na wybraniu aut, które:

  • należą do segmentu C, jest to najpopularniejszy segment aut. Wybierałem z tego segmentu modele dla których znalazłem przynajmniej 100 ofert sprzedaży, co mam nadzieje wystarczy do rozsądnej estymacji. Wybrane modele to: Golf, Astra, A3, C4, Focus, Civic, i30, Cee’d, 308, Octavia.
  • mają mniej niż 12 lat, czyli rok produkcji to przynajmniej rok 2000,
  • ma nadwozie Kombi lub Hatchback, pozostałe wersje nadwozia są znacznie mniej popularne,
  • jest zarejestrowane w Polsce,
  • pochodzi z jednego z krajów: Polska, Wlochy, Czechy, Francja, Holandia, Belgia, Niemcy,
  • rodzaj paliwa to diesel, benzyna lub benzyna+LPG, inne bardziej egzotyczne źródła energii pomijam,
  • pojemność silnika jest z przedziału 1150 – 2200 cm3,
  • skrzynia biegów jest manualna,
  • auto nie jest uszkodzone a cena jest ceną brutto.

Po zastosowaniu tych filtrów pozostaje jedynie 13 419 aut, czyli mniej niż 10%. Wybrana grupa jest jednak bardziej jednorodna, mniej jesteśmy więc narażeni na ,,niespodziewane” problemy związane z brakiem zrównoważenia danych. Np. nie musimy się przejmować artefaktem związanym z tym, że najstarsze golfy mają po kilkadziesiąt lat, a modele i30 są co najwyżej kilkuletnie.

Kodowanie zmiennych i wstępne transformacje

Zanim zaczniemy cokolwiek modelować, trzeba zastanowić się jak zakodować zmienne w modelu. Po serii prób wybrałem następujące transformacje przygotowujące dane

  • zamiast roku produkcji analizowany będzie wiek auta, czyli 2012 – rok produkcji. Ułatwi to interpretację ceny efektu wieku auta (porównywałem też wyniki z wiekiem traktowanym jako zmienna jakościowa, ale nie były lepsze, więc wiek pozostał zmienną ilościową)
  • pojemność silnika została zamieniona na zmienną jakościową z poziomami co 100cm3.
  • z adresu auta wyciągnąłem informację o kodzie pocztowym, odpowiednio pierwszej cyfrze kodu pocztowego, dwóch pierwszych cyfrach i wszystkich pięciu cyfrach.
  • z kolumn wyposażenie dodatkowe i informacje dodatkowe wyciągnąłem elementy wyposażenia pojawiające się w przynajmniej 100 ofertach. Dodałem kolumny kodujące binarnie czy auto posiada: niezalezne ogrzewanie, instalacja gazowa, szyberdach, bagażnik na dach, blokada skrzyni biegow, skorzana tapicerka, ksenony, EDS, system nawigacji, hak, podgrzewane fotele, pod. przednia szyba, przyciemniane szyby, czujnik deszczu, czujnik parkowania, tempomat, kierownica wielofunkcyjna, welurowa tapicerka, ASR, garażowany, ESP, alufelgi, autoalarm, lwiatla przeciwmglowe, pierwszy wlasciciel, serwisowany w ASO, bezwypadkowy, komputer, el. lusterka, radio / CD, immobiliser, el. szyby, poduszka powietrzna, klimatyzacja, centralny zamek, ABS, wspomaganie kierownicy.
  • cenę wyrażoną w różnych walutach zamieniłem na cenę w PLN.
  • zmienną do analizy będzie logarytm dwójkowy ceny. Analiza ceny z użyciem modeli gaussowskich nie ma sensu, mając do wyboru transformację ceny albo rozważanie bardziej złożonych klas modeli wybrałem transformację. Z rodziny transformacji Boxa Coxa najlepiej wypadała transformacja y^0.2, ale nie różniła się ona znacząco od logarytmu więc wybrałem logarytm bo łatwiej go interpretować.

 

Model 1. Najistotniejsze czynniki

Korzystając z tzw. wiedzy eksperckiej i po kilkunastu próbach eksperymentalnych jako trzy najważniejsze czynniki wpływające na cenę samochodu wybrałem: model samochodu, nadwozie i wiek auta. Jeżeli w modelu uwzględni się wiek to okazuje się, że deklarowany przebieg w km ma minimalne znaczenie, więc na tym etapie został pominięty.

Poniżej przedstawiam wyniki estymacji współczynników modelu. W kolejnym wpisie, gdy pokażemy wizualizacje naszych danych łatwiej będzie uwierzyć, że otrzymany model jest sensowny. Btw: poniższy model tłumaczy 85% zmienności ceny auta, całkiem dużo jak na trzy zmienne.

Co ciekawego można zauważyć? Audi A3 jest średnio najdroższe bez względu na to czy w wersji Kombi czy nie (droższe przynajmniej o 1/4), czy jest to efekt samej marki czy wyposażenia okaże się z później. Dla różnych modeli auta z nadwoziem kombi są średnio droższe (Octavia, Cee’d) lub tańsze (Civic, Focus) od hatchbacków. W salonach wersja kombi jest zawsze droższa (podobnie jak diesel) ale jak się okazuje dla Forda lub Civica na rynku może być więcej aut w nadwoziu kombi ze słabszym wyposażeniem lub większym przebiegiem lub sprowadzonych lub z inną cechą która odbija się na cenie.

Model 2. Wyposażenie dodatkowe

Opisując transformacje zmiennych napisałem że do zbioru danych dodałem 37 binarnych zmiennych opisujących wyposażenie auta. Zobaczmy, które elementy wyposażenia mają największy wpływ na cenę auta.

Aby zmniejszyć objętość poniższego przykładu przedstawiam wyniki tylko dla wybranych elementów wyposażenia. Cztery elementy wyposażenia najdroższych aut to kseony, ESP, klimatyzacja i elektryczne lusterka. Auta, które w opisie wyposażenia miały wymienione wspomaganie kierownicy lub poduszkę powietrzną są o kilka procent tańsze od aut bez tych elementów w opisie. Nie oznacza to oczywiście, że z dwóch aut podobnych to bez wspomagania kierownicy jest droższe. Oznacza to raczej, że w opisie auta jeżeli pojawia się wspomaganie kierownicy to nie pojawiają się inne elementy jeszcze bardziej zwiększające ceny auta. Należy więc być bardzo ostrożnym interpretując wyniki z modelowania cen.

Poniższy model wyjaśnia już ponad 90% wariancji.

 

Model 3. Lokalizacja, lokalizacja, lokalizacja

Kuszące jest dodać do modelu informację o kodzie pocztowym aby sprawdzić czy miejsce w którym oferowane jest auto istotnie wpływa na cenę ofertową.

 

Model 4. Te wszystkie nieistotne zmienne

Ciekawym eksperymentem może być samodzielne znalezienie innych czynników istotnie różnicujące cenę auta. Szybko jednak się okazuje, że wyniki rozjeżdżają się z intuicją. I jest to za każdym razem efekt niezrównoważonych zmiennych (porównując diesle i silniki benzynowe trudno uciec od tego że diesle mają większy przebieg). Drugi ciekawy problem to szybko rosnąca macierz modelu. Jeżeli uwzględnimy wiek jako zmienna jakościowo i będziemy analizować jego interakcje z kodem pocztowym to jedna interakcja generuje ponad 1000 kolumn do macierzy modeli.

Analiza takich danych jest znacznie ciekawsza niż analiza zależności pomiędzy szerokościami płatków irysów jest też znacznie trudniejsza. Ale też bliższa rzeczywistym problemom.

Więc życzę miłej zabawy!

Plan na kolejny wpis: przedstawić powyższe liczbowe wyniki graficznie.