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.

#
# Filtrujemy dane. Pozostawiamy tylko auta pasujące do powyższego opisu.
# W wyniku otrzymujemy trochę ponad 13 tys aut
#
load("cenyAutIII2012.Rdata")
modele <- c("Golf", "Astra", "A3", "C4", "Focus", "Civic", "i30", "Cee'd", "308", "Octavia") 
segmentC <- cenyAutIII2012[(cenyAutIII2012$Model %in% modele) & 
                 (cenyAutIII2012$Nadwozie %in% c("Kombi", "Hatchback")) & 
                 (cenyAutIII2012$Kraj.aktualnej.rejestracji == "Polska" | cenyAutIII2012$Kraj.aktualnej.rejestracji == "") & 
                 (cenyAutIII2012$Kraj.pochodzenia %in% c("Wlochy", "Czechy", "Francja", "Holandia", "Belgia", "Polska", "Niemcy", "")) & 
                 (cenyAutIII2012$Rodzaj.paliwa %in% c("benzyna+LPG", "benzyna", "olej napedowy (diesel)")) &
                 (cenyAutIII2012$Pojemnosc.skokowa > 1150 & cenyAutIII2012$Pojemnosc.skokowa < 2201) &
                 cenyAutIII2012$Rok.produkcji > 2000 & 
                 cenyAutIII2012$Skrzynia.biegow == "manualna" & 
                 cenyAutIII2012$Brutto.netto == "brutto" & (cenyAutIII2012$Liczba.drzwi %in% c("2/3", "4/5")) & cenyAutIII2012$Pojazd.uszkodzony == "",]
segmentC <- segmentC[!is.na(segmentC$Cena),]

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ć.
#
# Dodajemy do zbioru danych zmienne po transformacji.
#
# Zamieniamy rok produkcji na wiek
segmentC$wiek <- 2012 - segmentC$Rok.produkcji
 
# Zamieniamy ilościową zmienną pojemność na zmienną jakościową
segmentC$pojemnosc <- factor(((segmentC$Pojemnosc.skokowa - 50) %/% 100) * 100 + 50)            
 
# konstruujemy zmienną opisująca lokalizację geograficzną, 
# odpowiadającą pierwszej cyfrze kodu (mniej więcej województwo), 
# dwóm pierwszym cyfrom kodu pocztowego lub wszystkim pięciu cyfrom kodu pocztowego.
segmentC$kodPocztowy5 <- factor(substr(segmentC$Adres, 1,6))
segmentC$kodPocztowy1 <- factor(substr(segmentC$Adres, 1,1))
segmentC$kodPocztowy2 <- factor(substr(segmentC$Adres, 1,2))
 
# usuwamy zbędne puste poziomy
segmentC$Model = factor(segmentC$Model)
segmentC$Nadwozie = factor(segmentC$Nadwozie)
segmentC$Rodzaj.paliwa = factor(segmentC$Rodzaj.paliwa)
 
# Konstruujemy macierz cech dodatkowych, najpierw identyfikujemy listę nazw wyposażenia dodatkowego 
# a następnie budujemy odpowiednią ramkę danych
tmp <- paste(as.character(segmentC$Wyposazenie.dodatkowe),as.character(segmentC$Informacje.dodatkowe), sep=", ")
tmps <- strsplit(tmp, split=", *")
cechy <- names(sort(table(factor(unlist(tmps))))[10:46])
ncechy <- sapply(cechy, function(x) grepl(x, tmp))
 
# Składamy nowe zmienne w ramkę danych segmentC2
segmentC2 <- data.frame(segmentC[,c("Cena.w.PLN", "Model", "Nadwozie", "Pojemnosc.skokowa", "Rodzaj.paliwa", 
  "wiek", "kodPocztowy2", "kodPocztowy1")], ncechy)

 

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.

#
# Pomocnicza funkcja, przedstawiająca tabelę efektów w bardziej zwartej i czytelnej postaci. Przekształcamy efekty liczone na logarytmach tak by przedstawiały ,,efekt multiplikatywny'' czyli porównanie procentowej ceny aut.
#
opisz <- function(x, filtr="") {
 tt <- data.frame(round(2^x[grepl(filtr, rownames(x)),1,drop=F]*1000)/10, 
       signif = cut(x[grepl(filtr, rownames(x)),4,drop=F], c(-1,0.001,0.01,1), c("**","*","")))
 tt[order(tt[,1]),]
}
 
#
# Wyniki analizy wariancji
# Jak widzimy największy wpływ na cenę auta ma wiek, w drugiej kolejności model auta i typ nadwozia
#
> anova(model <- lm(log(Cena.w.PLN,2)~Model:Nadwozie+wiek, segmentC2))
Analysis of Variance Table
 
Response: log(Cena.w.PLN, 2)
                  Df Sum Sq Mean Sq  F value    Pr(>F)    
wiek               1 5873.4  5873.4 67373.01 < 2.2e-16 ***
Model:Nadwozie    18  706.9    39.3   450.47 < 2.2e-16 ***
Residuals      13399 1168.1     0.1                       
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1 
#
# Referencyjnym poziomem jest Skoda Octavia Kombi
# Wartość w kolumnie ,Estimate' odpowiada mniej więcej temu ile procent średniej ceny 
# Skody Octavii Kombi  stanowi średnia cena danego auta w określonej wersji nadwozia. 
# Czyli np. cee'd kombi jest o 15% tańszy od octavii kombi (przyjmując tę samą utratę 
# wartości z uwagi na wiek), za to Audi A3 kombi jest średnio o 35% droższe niż Octavia Kombi.
#
# Wartość przy zmiennej wiek oznacza że auta średnio tracą około 14% wartości na rok.
# 
> opisz(summary(model)$coefficients)
                                Estimate signif
ModelCivic:NadwozieKombi            69.7       
ModelFocus:NadwozieKombi            70.2     **
ModelC4:NadwozieHatchback           72.9     **
Modeli30:NadwozieHatchback          73.9     **
ModelCee'd:NadwozieHatchback        74.5     **
ModelAstra:NadwozieKombi            75.3     **
ModelFocus:NadwozieHatchback        75.4     **
Modeli30:NadwozieKombi              78.0     **
ModelAstra:NadwozieHatchback        78.5     **
Model308:NadwozieKombi              79.6     **
Model308:NadwozieHatchback          80.6     **
ModelCee'd:NadwozieKombi            86.3     **
ModelOctavia:NadwozieHatchback      93.4     **
ModelGolf:NadwozieKombi             93.6     **
ModelCivic:NadwozieHatchback        96.0     **
ModelGolf:NadwozieHatchback         98.8       
ModelA3:NadwozieHatchback          124.5     **
ModelA3:NadwozieKombi              135.4     **
wiek                                86.0     **

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.

#
# Auta z kseonowymi lampami, klimatyzacją, ESP, elektrycznymi lusterkami są 
# średnio o kilka procent droższe od aut bez tych elementów. 
# Większość elementów wyposażenia nie różnicuje istotnie ceny auta
#
> model <- lm(log(Cena.w.PLN,2)~Model*Nadwozie+wiek+.-kodPocztowy1-kodPocztowy2, segmentC2)
> opisz(summary(model)$coefficients, "TRUE")
                              Estimate signif
wspomaganie.kierownicy        91.4     **
poduszka.powietrzna           94.6     **
welurowa.tapicerka            96.2     **
...
pierwszy.wlasciciel          100.2       
serwisowany.w.ASO            100.5       
bezwypadkowy                 100.7       
przyciemniane.szyby          101.0       
czujnik.deszczu              101.3       
system.nawigacji             101.9      *
tempomat                     101.9     **
bagaznik.na.dach             102.1       
skorzana.tapicerka           102.3      *
podgrzewane.fotele           102.5     **
el..szyby                    102.5      *
alufelgi                     103.0     **
kierownica.wielofunkcyjna    103.1     **
komputer                     103.2     **
klimatyzacja                 103.3     **
el..lusterka                 103.8     **
ESP                          104.3     **
ksenony                      108.2     **

 

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ą.

#
# Różnice pomiędzy cenami aut są ,,istotne statystycznie''
# Nie jest to jednak duże osiągnięcie, biorąc pod uwagę 13 tysięcy ofert 
# na których przeprowadzamy testowanie.
# Wartość różnic nie jest duża w porównaniu do efektu wieku, modelu czy typu nadwozia.
#
> anova(model <- lm(log(Cena.w.PLN,2)~Model:Nadwozie+wiek+kodPocztowy1+kodPocztowy2+kodPocztowy5, segmentC2))
Analysis of Variance Table
 
Response: log(Cena.w.PLN, 2)
                  Df Sum Sq Mean Sq    F value    Pr(>F)    
wiek               1 5873.4  5873.4 72953.9503 < 2.2e-16 ***
kodPocztowy1      10    7.4     0.7     9.1992 2.489e-15 ***
kodPocztowy2      88   39.0     0.4     5.5087 < 2.2e-16 ***
kodPocztowy5    1091  240.8     0.2     2.7419 < 2.2e-16 ***
Model:Nadwozie    18  604.7    33.6   417.2709 < 2.2e-16 ***
Residuals      12210  983.0     0.1                         
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

 

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.

Jak dojechać z Warszawy do Wrocławia zwiedzając po drodze Jasną Górę?

 

Przygotowując prezentację na Szkołę Infografiki (o której pisałem w poniedziałek)  jako pierwszą ,,infografikę” do pokazania wybrałem wizualizację rozkładu jazdy pociągów pomiędzy Paryżem a Lionem (patrz rysunek po prawej stronie) wykonaną przez E. J. Mareyego.

To dosyć kontrowersyjna grafika, dla jednych zupełnie nieczytelna, innych urzekająca elegancją i pomysłowością. Różne są gusta, w każdym razie mnie się bardzo podoba.

Na tym by się pewnie skończyło, gdyby nie to że z różnych powodów kursuję czasami pomiędzy Warszawą a Wrocławiem. Z różnych środków lokomocji najbardziej lubię jeździć pociągami więc pojawił się pomysł przygotowania podobnego wykresu dla trasy Warszawa-Wrocław. Pomysł zamienił się w chęć, chęć zamieniła się w obsesję której nie powstrzymało nawet dziwne API serwisu pkp.pl.

Niestety w przeciwieństwie do trasy Paryż – Lion trasa Wrocław – Warszawa nie jest trasą bliską najkrótszej możliwej. Trzeba jechać ,,dookoła” i można wybrać albo drogę przez Katowice albo Częstochowę albo Poznań. W wizualizacji którą zaraz pokażę zaznaczone będą połączenia przez wszystkie te trzy ścieżki, ale uniemożliwia to zachowanie takich samych proporcji w odległościach fizycznych pomiędzy miastami co w odległościach na osi OY wykresu. Dokładne mapowanie nie jest możliwe bo np. Częstochowa jest w 52% drogi z Warszawy do Wrocławia jeżeli nie jedzie się przez Katowice albo w 46% drogi jeżeli jedzie się jeszcze przez Katowice. Na trasie Paryż – Lion połączenia odpowiadają jednej możliwej drodze, dlatego też na wykresie Mareya nachylenia krzywych odpowiadają prędkościom, a u mnie nie. Ale postaram się trzymać proporcji możliwie blisko.

Dane zebrałem ze strony pkp.pl, niestety z powodu częstych zmian rozkładu należy te dane traktować jako jedynie ilustrację rozkładu jazdy pociągów na dzień 22 marca 2012 roku. Nie wiadomo jak długo ten rozkład będzie obowiązywał. Dostęp do danych wraz z wybranymi stacjami pośrednimi znajduje się w tym pliku csv.

Do narysowania wizualizacji rozkładu jazdy wykorzystałem oczywiście program R. Kod w R użyty do narysowania tego wykresu znajduje się tutaj.

Poniższa wizualizacja nie jest być może zbyt efektywna, ale można dzięki niej łatwo zaplanować sobie przejażdżkę do Wrocławia z kilkugodzinnym pobytem w Częstochowie, który to można wykorzystać na miłe spędzenie czasu w tymże mieście. Podobne wizualizacje powstają też np. do przedstawiania połączeń autobusowych pomiędzy różnymi punktami w mieście lub połączeń lotniczych pomiędzy miastami.

Różne kolory przedstawiają różne pociągi. Kropki odpowiadają stacjom. Pogrubione linie oznaczają pociągi jadące bezpośrednio z Warszawy do Wrocławia. Po kliknięciu powinna otworzyć się wersja svg tego rysunku, a jeżeli się nie otworzy to można znaleźć wersję png tutaj.


Szkoła Infografiki a moja prezentacja

W poprzedni czwartek 22 marca miałem przyjemność poprowadzić godzinną prezentację nt. dobrych i złych wykresów. Prezentacja miała miejsce w ramach warsztatów organizowanych przy Szkole infografiki. Szkoła infografiki jest projektem prowadzonym przez Centrum Cyfrowe projekt” Polska.

Spotkanie odbyło się w klubokawiarni na Chłodnej 25. Okazuje się, że w piwnicach jest sala na około 50 osób z projektorem i ekranem. Kawa jest bardzo dobra i znacznie tańsza niż w centrum. Więc wygląda to jak bardzo ciekawe miejsce na spotkania warsztatowe niewielkich grup. Polecam.

Mnie się spotkanie bardzo podobało, choć jako prezentujący mogę mieć spaczone wrażenie. Zainteresowanych osób było sporo, ścisłowców było mało ale byli, byli też prawdziwi dziennikarze, tym ciekawiej spojrzeć na jakiś temat z innej strony. Kolejną prezentację, mniej więcej za miesiąc, ma poprowadzić specjalistka od grafiki i informacji z ASP w Katowicach, również polecam.

Więcej informacji Szkole infografiki i podobnych projektach można znaleźć tutaj.

Więcej informacji o think-tanku (zna ktoś jakieś dobre, czyli niedosłowne, tłumaczenie?)  Centrum Cyfrowe projekt: Polska tutaj.

Więcej informacji o klubokawiarni na Chłodnej znajduje się tutaj.

Klikając na poniższy slajd można pobrać moją prezentację (uwaga, ponad 10MB).

Spotkanie było też nagrywane i pewnie na stronach Centrum pojawi się kiedyś odnośnik do nagrania.

AKTUALIZACJA: Link do nagrania z warsztatów.

 

Ceny używanych aut po raz trzeci

 

W październiku poprzedniego roku i 1 stycznia tego roku zebrałem na bazie serwisu www.otomoto.pl zbiór opisujący cen i wiele dodatkowych parametrów z ofert sprzedaży samochodów używanych (zobacz między innymi te wpisy). Dzisiaj dodaję zbiór danych o cenach samochodów z połowy marca roku 2012. Na podstawie tych trzech pomiarów będziemy mogli się przyjrzeć temu jak się zmieniały ceny używanych aut w przeciągu ostatnich 6 miesięcy.

Do pierwszego zbioru danych dołączyłem kilka analiz statystycznych i wizualizacji. Do drugiego zbioru danych dodałem szczegółowy opis jak takie dane pobierać. Zabrakło mi jednak czasu by przedstawić wyniki analiz statystycznych danych zebranych w styczniu.

Okazało się jednak, że nawet surowe dane mogą być przydatne. W tak zwanym między czasie otrzymałem od trzech osób informację, że ten zbiór danych bardzo im się przydał w projekcie licencjackim. A od jednej osoby otrzymałem nawet napisaną już pracę licencjacką poświęconą różnym technikom analizy danych z przykładami na zbiorze danych o samochodach pobranym z tego bloga.
Super!!!
Więcej takich projektów!
Jeżeli autorzy się zgodzą to podlinkuję ich wyniki do odpowiednich wpisów.

Jeden z częściej pojawiających się komentarzy od osób pracujących na zebranych danych dotyczył braku informacji o typie nadwozia. W poprzednio zbieranych danych typ nadwozia nie był bezpośrednio identyfikowalny.

Mając to na uwadze tym razem listę zmiennych opisujących ofertę sprzedaży auta rozszerzyłem o dwie nowe zmienne. Pierwszą jest typ nadwozia a drugą jest kod pocztowy i nazwa miejscowości z której pochodzi dane ogłoszenie.

Ponieważ ostatnio interesowałem się analizą danych przestrzennych i funkcjami do przedstawiania danych na mapach, więc postaram się w najbliższych dniach pokazać co ciekawego można zrobić z cenami samochodów używanych mając też informacje o miejscu złożenia oferty sprzedaży.

Skrypt wczytujący do programu R dane zebrane w marcu 2012 znajduje się tutaj.

Dane w postaci tekstowej i binarnej znajdują się w tym katalogu.

Ekonomia i markerting, liczba doktorantów a wykresy

Dzisiejszy wpis prezentuje jedną z nagrodzonych prac na podejrzaną wizualizację. Konkurs jest opisany dokładnie w tym wpisie (btw: zostały mi jeszcze trzy komplety gadżetów do rozdania za wskazania interesujących wykresów).

Tym razem przyjrzymy się wykresom z miesięcznika Uniwersytetu Ekonomicznego w Krakowie ,,Kurier UEK”. Szczególnie tym ze stron 14-15.

Zacznijmy od ilustracji liczby uczelni z którą współpracował UEK.

Wykres pokazuje, że liczba współpracujących placówek rośnie i rośnie. Wrażenie wzrostów zostało podkręcone, kilkoma ,,sztuczkami”

  • perspektywą, wykres jest tak obrócony, że ten sam wynik liczbowy wyglądałby jak wzrost,
  • zmienioną osią OY, wybraną tak by uwypuklić najmniejsze zmiany,
  • dorysowaną jaśniejszym kolorem parabolą, która jest wyłącznie estetycznym zabiegiem wzmacniającym wrażenie wzrostów.

Wzrosty są, ale ten wykres je uwypukla do granic przyzwoitości. Zobaczmy jak wyglądałby ten sam wykres bez ozdobników.

 


Wzrosty nie są już takie spektakularne. Jest wyraźna tendencja wzrostowa, ale po osi OY widać, że wzrost wyniósł około 15% przez 5 lat.

 

Kolejny wykres, który mnie zainteresował to pozycja polskich uczelni ekonomicznych w rankingu Webometrics 2012.

UE Kraków ma czegoś więcej niż pozostałe uczelnie ekonomiczne i wyraźnie jest ,,wyżej”. Nie jest niestety wyjaśnione czym są punkty z tego wykresu. Nie jest to pozycja w rankingu, gdyż po pierwsze tak wysoko polskie uczelnie w rankingach nie stoją a po drugie UAE nie chwaliłby się pozycją niższą niż pozostałe szkoły. Nie udało mi się niestety odszyfrować co ta liczba oznacza.

Ranking Webometrics przedstawia wyniki w różnych aspektach oraz pozycję danej uczelni w globalnym światowym rankingu. Wiele polskich uczelni jest w tym rankingu uwzględnianych, wybrałem 10 ekonomicznych i przygotowałem taki oto wykresik.

Kolumna ,,World Rank” odpowiada pozycji w globalnym światowym rankingu uczelni, a pozostałe cztery kolumny odpowiadają pozycjom w rankingach jeżeli uwzględnić jedynie określony aspekt. Odpowiednio Rich.Files to ranking oparty o liczbę dokumentów .doc, .pdf., .ppt itp znalezionych przez Googla wskazujących na tą uczelnię, ,,Scholar” to ranking bazujący na wynikach z Google Scholar, ,,Size” to ranking bazujący na liczbie stron zidentyfikowanych przez Googla, ,,Visibility” to ranking oparty na liczbie zewnętrznych odnośników o stron danej uczelni. Na osi OY przedstawiono miejsce w rankingu światowym (yupii, dwie uczelnie ekonomiczne są w piątym tysiącu na świecie :-P).

Co ciekawe porównując dwa powyższe rysunki, okazuje się, że UEK nie jest drugie w kategorii World.Rank i na niższych pozycjach w pozostałych kategoriach. Wyprzedza ją tylko prywatna Wyższa Szkoła Lipińskiego, ale ta nie znalazła się na wykresie z Kuriera UEK.

W każdym razie po raz kolejny widzimy, że wybierając konkurentów i kategorię zawsze można znaleźć kombinację kryteriów w których jest się najlepszym.

 

I ostatni wykres w dzisiejszym zestawieniu, ma te same wady co pierwszy z prezentowanych, ale dotyczy ciekawej kwestii, mianowicie liczby studentów studiów doktoranckich.

Ten sam wykres bez ozdobników wygląda tak.

W ciągu 4 lat liczba doktorantów wzrosła ponad 50%. Ciekawe czy jest to globalny trend, tzn. liczba doktorantów wszędzie rośnie, ale czy też w takim tempie? Może to i dobrze. Jak wynika z rożnych podsumowań innowacyjność w Polsce jest bardzo niska. Może kształcąc wielu doktorów poprawimy przynajmniej wskaźnik ,,procentu doktorów pracujących w przemyśle”.

🙂

Dwa miliony głosów…

Dzisiaj i w środę będziemy kontynuować temat konkursu na złą i dobrą wizualizację (więcej informacji w tym wpisie).

Zacznę od małego testowego pytania, ile razy prawy ciemnoczerwony ludzik jest większy od lewego blado czerwonego. Oba te ludziki występują w wizualizacji danych, którą zaraz przedstawię. Ale zanim to zrobię ciekaw jestem jakich proporcji się spodziewacie. Ludzik odpowiada liczbie emigrantów i pytanie brzmi ile razy liczba emigrantów wzrosła pomiędzy rokiem 2010 a 2004.

Zachowajmy na chwilę tę proporcję w pamięci, zaraz do niej wrócimy.

Wcześniej jeszcze kilka słów teorii.

Przedstawiając różne wizualizacje spotykam się z opinią, że wykres urozmaicony kolorystycznie jest łatwiejszy od odczytania. Być może. Ale w powyższym przykładzie ciemniejszy kolor będzie wydawał się większy, tylko dlatego że jest ciemniejszy.

Druga wątpliwość to wybór charakterystyki ludzika, która jest proporcjonalna do liczby emigrantów. Czy wzrost ludzika czy jego pole? Większość osób uzna pole ludzika za właściwą miarę do porównywania proporcji.

Kolejna interesująca sprawa to złudzenia percepcji wynikające z kontekstu w którym obrazek jest umieszczony.

Jeżeli teraz porównać wielkość czerwonego ludzika z roku 2010 do bladego ludzika z roku 2004 to proporcja wielkości może okazać się mniejsza niż w przypadku, gdy te dwa ludziki stały obok siebie.

Wykres z ludzikami i odpowiadającymi im liczbami znajduje się poniżej. Pochodzi on z tego artykułu z serwisu interia.pl.

Do konkursu został zgłoszony z komentarzem, że pierwszy ludzik nie ma wysokości odpowiadającej jednej jednostce tylko mu ,,głowa znacznie wystaje” ponad linię pomocniczą, najpewniej odpowiadającą wartości 1.

Ale większy ,,grzeszek” tego wykresu to używanie wysokości ludzików a nie ich pola do zobrazowania liczby emigrantów co zniekształca proporcje. Pole jako charakterystyka nie jest najlepsza (trudno porównuje się pola) lepszy byłby zwykły wykres słupkowy lub kropkowy.

Ach, zapomniałem. Zwykły wykres słupkowy lub kropkowy byłby nudny i kto wtedy chciałby przeczytać ten artykuł 😉

Sondaże poparcia dla partii, czyli I liga błędów i manipulacji

W poniedziałkowym wpisie (link tutaj) przedstawiłem zasady wciąż trwającego konkursu na wyśledzenie złych/błędnych/zmanipulowanych grafik. Wygrać można wiele ciekawych gadżetów i wciąż zapraszam do wzięcia w nim udziału.

Dziś przedstawię znalezisko, które zgarnęło kilka gadżetów, ponieważ aż trudno było mi uwierzyć ile błędów można znaleźć na jednym wykresie przedstawiającym 5 liczb.

Ale zanim pokażę ten wykres zacznę od krótkiego komentarza. Prezentując podczas rożnych okazji źle wykonane wykresy staram się (może niesłusznie) tłumaczyć ich autorów. Że temat porównywania średnich cen mieszkań jest trudny i być może autor przedstawił wyniki błędnie nieumyślnie. Że porównywanie rozkładów ocen to trudny temat i być może autor przedstawił te wyniki tak nieumyślnie. Że … itp. Gdy do czynienia ma się ze złożonymi danymi, np. ekonomicznymi czy medycznymi to o pomyłkę czy przeoczenie jest dosyć łatwo, ponieważ zmiennych jest dużo, zależą one od siebie w często złożony sposób itp. Łatwo więc zrzucić odpowiedzialność za błędy w takich analizach na pośpiech, brak doświadczenia czy brak ,,drugiego czytania”.

Inaczej ma się rzecz z wynikami poparcia dla partii politycznych. Tutaj struktura danych jest prosta jak drut. Zapytano o zdanie 1000 osób z czego X odpowiedziało tak, Y inaczej itp. Mój sąsiad czterolatek potrafi liczyć do 1000, więc chodząc do przedszkola jest w stanie przeprowadzić podstawową analizę takich danych. Tymczasem ,,analitycy” mają przy takich analizach zaskakujące wnioski. (Ok poparcie liczy się ciut bardziej skomplikowanie ponieważ stosuje się jeszcze wagi w zależności od reprezentatywności, ale nie jest to duża komplikacja).

Tym razem chodzi o artykuł z ,,portalu informacyjnego” tvn24.pl ,,Platformie ciągle spada”. Przedstawiono w tym artykule taki oto wykres:

W którym wyniki poparcia mierzone w lutym 2012 są porównywane z wynikami poparcia ze stycznia 2012. Na tej samej stronie jest nawet odnośnik do artykułu ze stycznia o wdzięcznym tytule ,,PO i PiS mocniejsze. Spada Palikotowi” w którym umieszczono taki wykres (w styczniu przeprowadzono wiele różnych badań, ale skoro to akurat jest linkowane więc można by je uznać za referencyjne).

KOREKTA START
@Karol zwrócił mi uwagę, że powinienem odnosić się do tego styczniowego artykułu.  W tym przypadku różnica procentów się zgadza. W tekście pod śródtytułem jest odnośnik to innego artykułu niż w ramce po prawej stronie śródtytułu.
KOREKTA STOP

Słów brakuje … spróbujmy jednak nazwać trzy główne grzechy (porównując artykuły z 13 stycznia i 13 lutego procenty się zgadzają i poniższe trzy punkty są nieaktualne)

  1. Tytuł ,,PO ciągle spada” ma się nijak do obserwacji, że miesiąc wcześniej PO poparcie wzrastało (przynajmniej według prezentowanego sondażu),
  2. spadek poparcia dla PO z 37% do 33% to nijak nie jest spadek o 7%,
  3. w przypadku PIS było w styczniu 22% jest w lutym 19% i dodany jest komentarz, że jest to wzrost o 1%.
Ale najzabawniejsze w tych błędach jest to, że artykuł ,,PO ciągle spada” został podesłany mi jako ,,zmanipulowany” z zupełnie innego powodu. Mianowicie pierwsza wersja wykresu przedstawiającego poparcie miała wysokości słupków niespecjalnie związane z prezentowanymi danymi. Oto porównanie, które otrzymałem, pokazujące wykres zmian poparcia w wersji oryginalnej i poprawionej po kilku godzinach.

Kilka dodatkowych kliknięć doprowadziło mnie do dwóch innych wyników dot. poparcia prezentowanego w serwisie tvn24.pl w lutym i styczniu. Poniżej przedstawiam chronologicznie artykuły, ich tytuły, informację o poparciu oraz jego zmianie dla trzech pierwszych partii.

Ja rozumiem, że wyniki sondażowe obarczone są dużą zmiennością, ale czekam na czasy kiedy dotrze to też do dziennikarzy i skończą się komentarze typu ,,na reprezentatywnej próbie 1000 polaków …”. oraz ,,ostro w dół i ostro w górę”

Jeden zły rysunek jest wart 1000 słów … korekty

 

W poniedziałek w tym wpisie napisałem o konkursie na wyśledzenie złej wizualizacji. Do tej pory rozdałem już cztery nagrody, dziś przedstawię jedno z ciekawszych znalezisk.

Rzecz dotyczy artykułu z serwisu interia.pl ,,Drożejąca energia podnosi koszty utrzymania mieszkań’’. Na wstępie możemy przeczytać

,,Inflacja niespodziewanie podniosła się w październiku do 4,3 proc. Ceny związane z utrzymaniem mieszkania rosły natomiast w takim samym tempie jak we wrześniu, czyli aż o 6,7 proc. rok do roku. Miesięczne koszty utrzymania mieszkania zajmowanego przez czteroosobową rodzinę przekroczyły już 849 zł.’’

Pomijam już czepianie się słówek typu ,,niespodziewanie” (dla kogo było to niespodziewane?), bo wszystko to przyćmiewa drugi obrazek dołączony do tego artykułu.

 

Niewątpliwie wykres pokazuje szybki wzrost z 205 pln do 212 pln w ciągu 10 miesięcy ale:

  • wrażenie szybkiego wzrostu wywołane jest skalą na osi OY, w skali 10 miesięcy na osobę wzrost wynosi 7pln,
  • daje to około 4% wzrostu w skali rocznej, a więc wzrost kosztu utrzymania mieszkania jest niższy niż ta niespodziewana październikowa inflacja i niższy od średniej rocznej inflacji (na rok 2011 inflacja to 4,3% według GUS),
  • oś OY jest tak dziwnie zmieniona, że jest wręcz anegdotyczna,
  • poziome ,,pomocnicze” linie przebiegają w trudnych do ustalenia wartościach, nie wiem czy słowo ,,pomocnicze’ jest tu odpowiednie.

Tak więc ten rysunek do artykułu nakręcającego strach przed rosnącymi cenami utrzymania mieszkania pasuje jak kwiatek do kożucha.

Czasem warto zmienić oś OY, ale zazwyczaj robi się to gdy porównuje się dwie krzywe i chce się uwypuklić różnice pomiędzy krzywymi lub gdy chce się przedstawić zmiany w dynamice krzywej. Przedstawiając na wykresie wartości bezwzględne lepiej pozostawić na osi OY punkt 0 aby długość lub wysokość odpowiadały tym wartościom bezwzglednym.

SFI, TED, IBM i konkursy

 

W skrócie dzisiejszy wpis składać się będzie z peanów zachwytu nad jakością organizacji 8 Studenckiego Festiwalu Informatycznego (SFI). Później zejdę na temat TEDów organizowanych w Krakowie a na koniec przedstawię dwa małe konkursiki, które ogłosiłem na SFI. Wciąż są otwarte i umożliwiają wygranie kilku gadżetów od firmy IBM.

SFI

Ośmy Studencki Festiwal Informatyczny rozpoczął się w ostatni czwartek a zakończył w sobotę. Miałem przyjemność w piątek rano opowiedzieć o analizie małych zbiorów danych, powiedzmy o rozmiarach do kilku megabajtów (tutaj przedstawiłem kilka wykresów prezentowanych na tym blogu), zbiorów danych o średniej wielkości, powiedzmy do gigabajta (tutaj opowiedziałem o kilku pomysłach na analizę danych z systemu USOS) i o analizie zbiorów danych o rozmiarach liczonych w tera czy peta bajtach (tutaj opowiedziałem o analizach danych z technik genotypowania kolejnej generacji, to źródło naprawdę dużych danych). Materiały do mojej prezentacji można pobrać klikając na poniższy odnośnik.

 

W czasie trwania festiwalu miałem okazję przyjrzeć się stronie organizacyjnej i też porozmawiać o niej z organizatorami. I muszę przyznać, że zostawiła ona na mnie spore wrażenie. Grono organizatorów składa się z ponad 30 osób, które są świetnie skoordynowane, co widać chociażby po tym, że każdy wie co należy do jego obowiązków. Niby sprawa oczywista, ale tak rzadko spotykana w tak dużych grupach. Organizatorzy zorganizowali po raz kolejny dużej wielkości festiwal, bezpłatny dla uczestników, moim zdaniem jeżeli chodzi o organizację to poprowadzony na poziomie największych międzynarodowych konferencji. Była i krótkofalowa komunikacja pomiędzy organizatorami i hostessy, radio, prezentacje nagrywane na wideo, zapowiedź obróbki wideo na poziomie VideoLectures, baloniki ;), wielkie banery na gmachach głównych krakowskich uczelni, aktywny bloga itp. Wszystko robione przez studentów i dla studentów. Ponoć to największe tego typu wydarzenie w tej części Europy (niestety zapomniałem o jak dużą część chodziło). W skrócie: świetna robota.

TED

Na festiwalu gęsto było od energii do tworzenia start-upów, niestandardowych rozwiązań, różnych innowacyjnych projektów. Nikt tu (tam?) nie miał wątpliwości, że Kraków jest miejscem gdzie najlepsze pomysły rodzą się i ścierają ze sobą. Dowiedziałem się między innymi o bardzo aktywnym TEDxKraków (37 prezentacji na stronie), o TEDxKrakow Cinema (nie słyszałem o tym wcześniej, w kinie ludzie spotykają się by obejrzeć np. 3 TEDy 20minutowe a później na ich temat dyskutują, brzmi super) i innych podobnych przedsięwzięciach. Szczególnie ten TEDxKrakow Cinema brzmi jak coś co warto przeżyć.

IBM

Przed wyjazdem dostałem od firmy IBM trochę gadżetów do rozdania w ramach konkursów. Konkursy są prywatną inicjatywą nie będącą częścią festiwalu. Konkursy są dwa, rozpoczęły się w piątek i wciąż trwają bo i zapas gadżetów jest całkiem pokaźny. Gorąco więc zapraszam do wzięcia w obu konkursach udziału, można wygrać pendrive’y i inne ciekawe gadżety (niestety odbiór tylko osobisty). Ale nagroda to nie wszystko, moim zdaniem konkursy są po prostu bardzo ciekawe i warto się zmierzyć z postawionymi w nich zadaniami.

Konkurs 1.

Dotyczy znalezienia na stronach gazet i portali informacyjnych grafik bardzo złych, przekłamujących rzeczywistość albo grafik barzdo dobrych, zapierających dech w piersiach pomysłowością i informacyjnością.

Konkurs 2.

Dotyczy pomysłu co można ciekawego zrobić mając dostęp do wszystkich danych z USOSa. Jakiego rodzaju informacja tam zawarta może okazać się przydatna szerokiej braci studentów?

Każda interesująca/ciekawa odpowiedź jest nagradzana (oferta ważna do wyczerpania zasobów, których jeszcze trochę jest). Podczas festiwalu otrzymałem kilka ciekawych odpowiedzi i opiszę je kiedyś przy okazji na blogu.

Oba konkursy są szerzej opisane w prezentacji pdf podlikowanej powyżej.

 

Szkoła Infografiki, 22 III 2012, klubokawiarnia Chłodna 25

Centrum Cyfrowe organizuje czteromiesięczne bezpłatne szkolenie o nazwie ,,Szkoła inforgrafiki”. Więcej o tym projekcie przeczytać można tutaj.

W ramach tej szkoły planowane są między innymi comiesięczne otwarte dla wszystkich pogadanki/przentacje. Poproszono mnie o poprowadzenie najbliższej, mniej więcej godzinnej pogadanki, która rozpocznie się 22 marca o godzinie 19 w klubokawiarni Chłodna 25.
No cóż, spróbujmy!
Zgłoszony temat to ,,Nie daj się oszukać wykresom”. Planuję pokazać kilka złych wizualizacji, przy czym pisząc złych mam na myśli wprowadzających w błąd. Do tego kilka popularnych reguł na co uważać przygotowując infografikę oraz kilka grafik, które wykonane były lata temu a wciąż są flagowym przykładem czytelnej reprezentacji złożonych danych.

Poniżej umieszczam pierwsza stronę prezentacji.