SlideShare a Scribd company logo
Python w analizie danych
Krzysztof Rykaczewski
9 marca 2017
DLabs
1
Analiza przypadku: rekomendacje reklam
• Problem: niski współczynnik konwersji (CTR) w reklamach
online w dużej platformie ad-management w Polsce.
2
Outline
• Systemy rekomendujące
• Implementacja
3
Systemy rekomendujące
Rekomendacje
4
“Od nieurodzaju do dostatku”
• Wolna przestrzeń na półce to towar deficytowy dla sprzedawcy
detalicznego.
• Sieć umożliwia niemal darmowe udostępnienie informacji o
produktach.
• Przykłady:
• książki, muzyka, filmy, ludzie (znajomi z Facebook-a).
5
Długi ogon
6
Od dostatku głowa nie boli. . .
• Więcej możliwości wyboru wymaga lepszych filtrów.
• Systemy rekomendujące.
• Jak “Into Thin Air” spowodowało sukces “Touching the Void”?
7
Typy rekomendacji
• Redakcyjna i ręcznie uporządkowana.
• Lista faworytów.
• Lista “właściwych” rzeczy.
• Proste agregacje:
• top 10 (IMDB), najbardziej popularne, ostatnio dodane.
• Dopasowane do indywidualnych użytkowników:
• Amazon, Netflix, Filmweb, IMDB, Pandora.
8
Macierz użyteczności
9
Najważniejsze problemy
1. Jak zebrać dane do macierzy użyteczności?
2. Ekstrapolowanie nieznanych ocen ze znanych danych.
• Głównie interesują nas wysokie oceny.
• Chcemy wiedzieć co lubimy, a nie czego nie lubimy.
3. Ewaluacja metod ekstrapolacji.
• Jak mierzyć skuteczność systemów rekomendujących?
10
Zbieranie ocen/danych
• Explicite:
• Pytaj ludzi o oceny rzeczy.
• Nie działa dobrze w praktyce, bo użytkownicy nie chcą
współpracować.
• Niewiele ocen — nieskalowalne.
• Implicite:
• Ucz się ocen z zachowania użytkownika, np. zakup oznacza
ocenę.
• Co z niskimi ocenami?
• W praktyce mamy model mieszany z tych dwóch podejść.
11
Ekstrapolowanie nieznanych ocen
• Główny problem:
• Macierz użyteczności jest rzadka, ponieważ ludzie nie są w
stanie ocenić wszystkich/większości rzeczy.
• Zimy start (cold start):
• Nowe produkty nie mają żadnych ocen.
• Nowi użytkownicy nie mają historii.
• Trzy podejścia do problemu:
• oparte na treści (content-based).
• społecznościowe (collaborative),
• zmienne ukryte (latent factor).
12
Systemy rekomendujące oparte o
treść
Rekomendacje oparte o treść
• Główna idea: rekomenduj użytkownikowi rzeczy podobne do
rzeczy wcześniej wysoko ocenionych przez niego.
• Przykład:
• Oceny filmów: rekomenduj filmy z tymi samymi aktorami, tym
samym reżyserem, gatunkiem etc.
• Strony internetowe, blogi, news: rekomenduj strony o podobnej
treści.
• Ludzie: rekomenduje tych, z którymi mamy wspólnych
znajomych.
13
Plan działania
14
Profil produktu
• Dla każdego produktu stwórz jego profil.
• Profil to zbiór (wektor) cech:
• filmy: twórca, tytuł, aktor, reżyser, etc.
• zdjęcia, wideo: metadata, tagi,
• ludzie: zbiór znajomych,
• tekst: zbiór najważniejszych słów w tekście.
15
Profil użytkownika
• Użytkownik ocenił produkty o profilach (wektorach): i1, i2, . . .,
in.
• Możliwe profile użytkownika:
• ważona średnia profili ocenionych produktów,
• wariant: znormalizuj wagi używając średniej oceny użytkownika,
agregacja etc.
16
Przykład — boolowska macierz użyteczności
• Produkty to filmy, a cechą jest aktor.
• Profil filmu to wektor 0 i 1.
• Niech użytkownik obejrzał 5 filmów:
• 2 z aktorem A,
• 3 z aktorem B.
• Profile użytkownika — średnia:
• waga cechy A = 2/5 = 0.4,
• waga cechy B = 3/5 = 0.6.
17
Przykład — oceny gwiazdkami
• Przykład jak wyżej z ocenami w skali 1–5.
• Filmy z A ocenione na 3 i 5.
• Filmy z B ocenione na 1, 2 i 4.
• Normalizujemy dane:
• Dla A: 0, 2. Waga = (0 + 2)/2 = 1
• Dla B: -2, -1, 1. Waga = −2/3.
18
Predykcja dla użytkownika
• Heurystyka predykcji:
• Przyznaj profilowi użytkownika x oraz produktowi i ocenę
u(x, i) = cos(x, i) =
x · i
x · i
. (1)
19
Plusy tego podejścia
• Nie potrzeba informacji od innych użytkowników: brak zimnego
startu i problemów z rzadkością danych.
• Można rekomendować użytkownikom ze specyficznym gustem.
• Można rekomendować nowe i niepopularne produkty.
• Dostajemy wyjaśnienie:
• Można wytłumaczyć dlaczego rekomendowaliśmy dany produkt
poprzez wgląd w cechy, które spowodowały jego rekomendację.
20
Minusy podejścia
• Znalezienie odpowiednich cech jest trudne, np.: obrazki, filmy,
muzyka etc.
• Rekomendacje dla nowych użytkowników: jak zbudować profil
użytkownika?
• Specjalizacja:
• nie rekomenduje produktów spoza profilu użytkownika,
• ludzie mają wiele zainteresowań,
• gusta się zmieniają,
• nie można wykorzystać ocen innych użytkowników.
21
Filtrowanie społecznościowe:
Wykorzystanie jakości osądów
innych użytkowników
Filtrowanie społecznościowe
• Rozważmy użytkownika x.
• Znajdź zbiór N użytkowników o podobnym
zestawie ocen do x.
• Oszacuj oceny użytkownika x opierając się
na ocenach ze zbioru N.
22
Znajdowanie podobnych użytkowników
• Niech rx oznacza wektor ocen użytkownika x.
• Podobieństwo kosinusowe:
• sim(x, y) = cos(rx , ry ) =
rx ·ry
rx · ry
.
• Problem: takie podobieństwo traktuje brakujące wartości jak
negatywne.
• Współczynnik korelacji Pearsona:
• Sx,y = produkty wspólnie ocenione przez x oraz y.
sim(x, y) = rxy =
s∈Sx,y
(rxs − rx )(rys − ry )
s∈Sx,y
(rxs − rx )2
s∈Sx,y
(rys − ry )2
.
(2)
23
Miara podobieństwa
• Intuicyjnie chcielibyśmy, żeby sim(A, B) > sim(A, C).
• Podobieństwo kosinusowe: 0.386 > 0.322.
• Brakujące wartości traktuje jako ujemne.
• Rozwiązanie: odejmij średnią (z rzędu)
24
Ocena predykcji
• Od miary podobieństwa do rekomendacji:
• Niech rx to wektor ocen użytkownika x.
• Niech N to zbiór k użytkowników najbardziej podobnych do x,
którzy wspólnie ocenili produkt i.
• Predykcja produktu i dla użytkownika x
• rx,i = 1
k y∈N
ry,i .
• rx,i = y∈N
sx,y ry,i
y∈N
sx,y
, gdzie sx,y = sim(x, y).
• Wiele innych możliwości. . .
25
Produkt-produkt vs użytkownik-użytkownik
26
Filtrowanie społecznościowe produkt-produkt
• Do tej pory omawialiśmy filtrowanie społecznościowe
użytkownik-użytkownik.
• Inne spojrzenie: produkt-produkt.
• dla produktu i znajdź podobne,
• zweryfikuj ocenę produktu i na podstawie ocen innych
produktów,
• można użyć podobnych metryk podobieństwa jak w przypadku
modelu użytkownik-użytkownik.
27
Produkt-produkt ( N = 2)
28
Produkt-produkt ( N = 2)
29
Produkt-produkt ( N = 2)
30
Produkt-produkt ( N = 2)
31
Produkt-produkt vs użytkownik-użytkownik
• W praktyce zaobserwowano, że podejście produkt-produkt
działa lepiej niż użytkownik-użytkownik.
• Dlaczego? Produkty są proste, a użytkownicy mają
różne/zmienne gusty.
32
Plusy/minusy CF
• Plusy:
• Działa dla każdego rodzaju produktów.
• Minusy:
• Zimny start: brak wystarczającej liczby użytkowników do
znalezienia dopasowania.
• Rzadkość: macierz ocen jest rzadka; ciężko znaleźć dwóch
użytkowników, którzy ocenili te same produkty.
• Pierwsza ocena: nie można ocenić produktu, który nie był
oceniony do tej pory.
• Popularność: nie można rekomendować produktu
użytkownikowi o indywidualnym guście; dąży do rekomendacji
popularnych produktów.
33
Metody hybrydowe
• Można zaimplementować dwa lub więcej różne systemy
rekomendacji i połącz ich predykcje.
• Można dodać metody oparte o treść:
• profile produktu dla nowych produktów,
• dane demograficzne pomogą poradzić sobie z nowymi
użytkownikami.
34
Przykład implementacji
Ładujemy główne biblioteki
1 # --- Import Libraries --- #
2 import pandas as pd
3 from scipy.spatial.distance import cosine
4
5 # --- Read Data --- #
6 events = pd.read_csv('data.csv')
35
Przyjrzyjmy się danym
1 print events.head().ix[:, 2:10]
User ID Advertiser ID Campaign ID Banner ID 
0 AAAGTHsdebojV3i_I1ddkw 14748 21090 201090
1 AAAGTHsdebojV3i_I1cjkw 14748 21090 201090
2 AAAGTHsdebojV3i_I1dNsQ 14748 21090 200892
3 AAAGTHsdebojV3i_I1dKnw 14748 21090 201090
4 AAAGTHsdebojV3i_I1dKnw 14748 21090 201093
Publisher ID Placement ID Event type Traits (JSON)
0 14751 826507 view [7407]
1 14751 826507 click [7406,7407]
2 14749 826297 view
3 14751 826507 view [7407]
4 14751 4611686018427387905 click [7406,7407]
36
Jak wyglądało wstępne przetworznie danych?
• Należało uzupełnić brakujące pola Traits.
• Z powodów technicznych należało położenie
4611686018427387905 zamienić na inny id.
37
Jak wyglądało wstępne przetworznie danych?
• Musimy zamienić tę tabelkę na macierz
(user,placement)/banner, gdzie wartość pola oznacza liczbę
klików (click) przez danego użytkownika w danym położeniu na
dany baner.
1 print data.head(4)
user_placement 201030 201139 201138 200894...
0 ('AAAGS3tzeAsjV3i_I1ccPA', 827046) 0 1 0 0...
1 ('AAEGTHtpeLYjV3i_I1cj3Q', 632093) 1 0 0 2...
2 ('AAEGTHsPeu4jV3i_I1d-fg', 827455) 1 0 0 0...
3 ('AAAGS3trepkjV3i_I1cjkg', 827145) 0 0 0 0...
38
Rekomendacje produkt-produkt
1 # --- Start Item Based Recommendations --- #
2 # Drop any column named "user_placement"
3 data_banner = data.drop('user_placement', 1)
39
Rekomendacje produkt-produkt
• Zanim policzymy podobieństwa musimy mieć miejsce, żeby je
trzymać.
• Tworzymy zmienną data_ibs typu ramki danych w pandas
(myślmy o tym jak o tabelce w Excel-u).
1 # Create a placeholder dataframe listing item vs. item
2 data_ibs = pd.DataFrame(index = data_banner.columns, 
3 columns = data_banner.columns)
• Zaczniemy ją wpełniać podobieństwami, a do tego potrzebna
nam będzie funkcja podobieństwa cosine.
40
Liczenie podobieństwa
1 # Lets fill in those empty spaces with cosine similarities
2 # Loop through the columns
3 for i in range(len(data_ibs.columns)):
4 # Loop through the columns for each column
5 for j in range(len(data_ibs.columns)):
6 # Fill in placeholder with cosine similarities
7 data_ibs.ix[i, j] = 1 - cosine(data_banner.ix[:, i],
data_banner.ix[:, j])
• Gdyby to była lista, to możnaby było to zrobić szybciej w list
comprehension.
41
Szukamy produktów w otoczeniu
• Mając policzone podobieństwa w data_ibs dla każdego
produktu będziemy poszukiwać produktów, które są mu
najbliższe.
1 # Create a placeholder items for closes neighbours to an item
2 data_neighbours = pd.DataFrame(index = data_ibs.columns, 
3 columns = range(1, 11))
4
5 # Loop through our similarity dataframe
6 # and fill in neighbouring item names
7 for i in range(len(data_ibs.columns)):
8 data_neighbours.ix[i, :10] = 
9 data_ibs.ix[0:, i].order(ascending = False)[:10].index
10
11 # --- End Item Based Recommendations --- #
42
Wyniki: produkt-produkt
1 print data_neighbours.head(6).ix[:6, 2:10]
2 3 4 5 6 7 8 9
201345 201090 200892 201093 200595 201494 200557 200695 200587
200578 200879 201419 200533 200594 201464 201379 200599 200663
201182 200663 201340 201363 201092 201355 201544 201162 201361
200557 200569 200590 201379 201179 200592 200562 201352 201349
201361 200559 200601 201435 200879 201563 201487 200598 201388
201385 201139 201335 201402 201360 200559 201356 200668 200941
43
Rekomendacje użytkownik-użytkownik
• Proces wygląda następująco:
• potrzebujemy macierzy podobieństwa produkt-produkt (mamy!);
• sprawdź, które produkty (banery) trafiły do danego użytkownika;
• dla każdego klikniętego baneru weź jego otoczenie;
• dla tego otoczeniu policz kliknięcia użytkownika;
• policz rangę podobieństwa ze wzoru;
• rekomenduje te produkty, które mają najwyższą rangę.
44
Funkcja podobieństwa
1 # --- Start User Based Recommendations --- #
2
3 # Helper function to get similarity scores
4 def getScore(history, similarities):
5 return sum(history * similarities) / sum(similarities)
45
Przygotowanie zmiennych
• Tworzymy zmienną na potrzeby przetrzymywania podobieństwa.
1 # Create a place holder matrix for similarities,
2 # and fill in the user name column
3 data_sims = pd.DataFrame(index = data.index, 
4 columns = data.columns)
5 data_sims.ix[:, :1] = data.ix[:, :1]
46
Wypełniamy podobieństwa I
• Wypełniamy macierz wartościami podobieństwa.
• Banery, które użytkownik już klinkął są ustawiane na 0, bo nie
ma sensu sugerować mu tego jeszcze raz.
47
Wypełniamy podobieństwa II
1 #Loop through all rows, skip the user column,
2 # and fill with similarity scores
3 for i in range(len(data_sims.index)):
4 for j in range(1, len(data_sims.columns)):
5 user = data_sims.index[i]
6 product = data_sims.columns[j]
7
8 if data.ix[i][j] == 1:
9 data_sims.ix[i][j] = 0
10 else:
11 product_top_names = data_neighbours.ix[product][1:10]
12 product_top_sims = data_ibs.ix[product].order(
ascending = False)[1:10]
13 user_rank = data_banner.ix[user, product_top_names]
14
15 data_sims.ix[i][j] = getScore(user_rank,
product_top_sims)
48
Rekomendacje użytkownik-użytkownik
1 # Instead of top scores, we want to see banner ids
2 for i in range(len(data_sims.index)):
3 data_recommend.ix[i, 1:] = data_sims.ix[i, :]
4 .order(ascending = False).ix[1:7,].index.transpose()
49
Wyniki: użytkownik-użytkownik
1 # Print a sample
2 print data_recommend.ix[:5, :5]
user_placement 1 2 3 4
0 ('AAAGS3tzeAsjV3i_I1ccPA', 827046) 200895 201090 200605 201183
1 ('AAEGTHtpeLYjV3i_I1cj3Q', 632093) 201336 201536 201294 201180
2 ('AAEGTHsPeu4jV3i_I1d-fg', 827455) 201347 201091 200593 201419
3 ('AAAGS3trepkjV3i_I1cjkg', 827145) 201344 201338 201359 201146
4 ('AAAGS3tlefEjV3i_I1cMfw', 588717) 200584 200578 200563 200582
50
Uwagi praktyczne
Ewaluacja
51
Ewaluacja
52
Problemy z pomiarem błędu
• Skupienie się na dokładności może spowodować, że zgubimy to
czego szukamy.
• Różnorodność predykcji.
• Kontekst predykcji.
• Porządek predykcji.
• W praktyce staramy się przewidzieć tylko najwyższe oceny:
• RSME: może karać metodę, która dobrze radzi sobie na
produktach z wysokimi ocenami, a gorzej na innych produktach.
53
CF: złożoność
• Koszt znalezienia k najbardziej podobnych użytkowników:
O( X ), gdzie X to zbiór użytkowników.
• Zbyt kosztowne, żeby wykonać w czasie rzeczywistym.
• Można wyliczyć wcześniej.
• Naiwny algorytm potrzebuje O(k X ).
• Można to przyspieszyć:
• Szukanie najbliższych sąsiadów w wysokich wymiarach (LSH).
• Grupowanie (clustering).
• Redukcja wymiarów.
54
Wszystkie dane
• Wykorzystaj wszystkie dane:
• nie zmniejszaj danych tylko dlatego, żeby jakiś algorytm lepiej
działał.
• proste metody na dużych danych lepiej sobie radzą.
• Dodaj więcej danych:
• np. dodaj dane o gatunku w IMDB.
• Więcej danych potrafi pobić lepsze algorytmy.
55
Referencje
• Rysunki zostały zaczerpnięte z:
• Mining of Massive Datasets, Jure Leskovec, Anand
Rajaraman, Jeff Ullman – Stanford University, 2006
• http://cs246.stanford.edu
56
• Dziękuję za uwagę!
57
Krzysztof Rykaczewski
• Krzysztof Rykaczewski ukończył doktorat z
matematyki na Uniwersytecie Mikołaja Kopernika
w Toruniu. Karierę rozpoczął pracując na
Uniwersytecie Warszawskim. W swoich badaniach
koncentruje się przede wszystkim na eksploracji
danych, uczeniu maszynowym, analizie nieliniowej
oraz teorii sterowania. Autor rozlicznych publikacji
oraz recenzent artykułów wielu międzynarodowych
czasopism naukowych.
• linkedin.com/in/krykaczewski/
• DLabs: dlabs.pl/
58

More Related Content

Viewers also liked

Teaching Elephants to Dance (and Fly!) A Developer's Journey to Digital Trans...
Teaching Elephants to Dance (and Fly!) A Developer's Journey to Digital Trans...Teaching Elephants to Dance (and Fly!) A Developer's Journey to Digital Trans...
Teaching Elephants to Dance (and Fly!) A Developer's Journey to Digital Trans...Burr Sutter
 
تسلية المصاب عند فقد الأقربين والأصحاب
تسلية المصاب عند فقد الأقربين والأصحابتسلية المصاب عند فقد الأقربين والأصحاب
تسلية المصاب عند فقد الأقربين والأصحابغايتي الجنة
 
Overcoming the Top 3 SMB Challenges with Marketing Automation
Overcoming the Top 3 SMB Challenges with Marketing AutomationOvercoming the Top 3 SMB Challenges with Marketing Automation
Overcoming the Top 3 SMB Challenges with Marketing AutomationPardot
 
Ibra trai qua
Ibra trai quaIbra trai qua
Ibra trai quabongda100
 
Are your pictures worth 1,000 words? (Eric Beteille)
Are your pictures worth 1,000 words?  (Eric Beteille)Are your pictures worth 1,000 words?  (Eric Beteille)
Are your pictures worth 1,000 words? (Eric Beteille)Eric Beteille
 
Encuesta nacional Cifras y Conceptos Canal Capital
Encuesta nacional Cifras y Conceptos Canal CapitalEncuesta nacional Cifras y Conceptos Canal Capital
Encuesta nacional Cifras y Conceptos Canal CapitalCanal Capital
 
Apports de la systémique à la gestion des organisations et des institutions p...
Apports de la systémique à la gestion des organisations et des institutions p...Apports de la systémique à la gestion des organisations et des institutions p...
Apports de la systémique à la gestion des organisations et des institutions p...Université Paris-Dauphine
 
Growing Divisions, Learning for the learning industry from Rejection of Brexi...
Growing Divisions, Learning for the learning industry from Rejection of Brexi...Growing Divisions, Learning for the learning industry from Rejection of Brexi...
Growing Divisions, Learning for the learning industry from Rejection of Brexi...Enhance Systems Pvt. Ltd.
 
News brief - Spring Budget 2017 highlights
News brief - Spring Budget 2017 highlightsNews brief - Spring Budget 2017 highlights
News brief - Spring Budget 2017 highlightsGary Chambers
 
Los orígenes idelógicos de la UCR
Los orígenes idelógicos de la UCRLos orígenes idelógicos de la UCR
Los orígenes idelógicos de la UCREscuelaFormacion
 
Revista Boa Vontade - Edição 241
Revista Boa Vontade - Edição 241Revista Boa Vontade - Edição 241
Revista Boa Vontade - Edição 241Boa Vontade
 
Social Media for Scientists: (re)launch & engage with confidence
Social Media for Scientists: (re)launch & engage with confidenceSocial Media for Scientists: (re)launch & engage with confidence
Social Media for Scientists: (re)launch & engage with confidenceAlec Walker-Love
 

Viewers also liked (15)

Teaching Elephants to Dance (and Fly!) A Developer's Journey to Digital Trans...
Teaching Elephants to Dance (and Fly!) A Developer's Journey to Digital Trans...Teaching Elephants to Dance (and Fly!) A Developer's Journey to Digital Trans...
Teaching Elephants to Dance (and Fly!) A Developer's Journey to Digital Trans...
 
تسلية المصاب عند فقد الأقربين والأصحاب
تسلية المصاب عند فقد الأقربين والأصحابتسلية المصاب عند فقد الأقربين والأصحاب
تسلية المصاب عند فقد الأقربين والأصحاب
 
Analytics for CMOs on the Rise
Analytics for CMOs on the RiseAnalytics for CMOs on the Rise
Analytics for CMOs on the Rise
 
Overcoming the Top 3 SMB Challenges with Marketing Automation
Overcoming the Top 3 SMB Challenges with Marketing AutomationOvercoming the Top 3 SMB Challenges with Marketing Automation
Overcoming the Top 3 SMB Challenges with Marketing Automation
 
Ibra trai qua
Ibra trai quaIbra trai qua
Ibra trai qua
 
80310cur
80310cur80310cur
80310cur
 
Are your pictures worth 1,000 words? (Eric Beteille)
Are your pictures worth 1,000 words?  (Eric Beteille)Are your pictures worth 1,000 words?  (Eric Beteille)
Are your pictures worth 1,000 words? (Eric Beteille)
 
Encuesta nacional Cifras y Conceptos Canal Capital
Encuesta nacional Cifras y Conceptos Canal CapitalEncuesta nacional Cifras y Conceptos Canal Capital
Encuesta nacional Cifras y Conceptos Canal Capital
 
Apports de la systémique à la gestion des organisations et des institutions p...
Apports de la systémique à la gestion des organisations et des institutions p...Apports de la systémique à la gestion des organisations et des institutions p...
Apports de la systémique à la gestion des organisations et des institutions p...
 
Dos and Don'ts for Developing Your App
Dos and Don'ts for Developing Your AppDos and Don'ts for Developing Your App
Dos and Don'ts for Developing Your App
 
Growing Divisions, Learning for the learning industry from Rejection of Brexi...
Growing Divisions, Learning for the learning industry from Rejection of Brexi...Growing Divisions, Learning for the learning industry from Rejection of Brexi...
Growing Divisions, Learning for the learning industry from Rejection of Brexi...
 
News brief - Spring Budget 2017 highlights
News brief - Spring Budget 2017 highlightsNews brief - Spring Budget 2017 highlights
News brief - Spring Budget 2017 highlights
 
Los orígenes idelógicos de la UCR
Los orígenes idelógicos de la UCRLos orígenes idelógicos de la UCR
Los orígenes idelógicos de la UCR
 
Revista Boa Vontade - Edição 241
Revista Boa Vontade - Edição 241Revista Boa Vontade - Edição 241
Revista Boa Vontade - Edição 241
 
Social Media for Scientists: (re)launch & engage with confidence
Social Media for Scientists: (re)launch & engage with confidenceSocial Media for Scientists: (re)launch & engage with confidence
Social Media for Scientists: (re)launch & engage with confidence
 

Similar to DLabs PyData MeetUp 9/03/2017

Materiały dodatkowe
Materiały dodatkoweMateriały dodatkowe
Materiały dodatkoweSEMSTORM
 
Usability - Trudne Pytania
Usability - Trudne PytaniaUsability - Trudne Pytania
Usability - Trudne PytaniaTomasz Karwatka
 
Usability Trudne Pytania
Usability Trudne PytaniaUsability Trudne Pytania
Usability Trudne Pytaniaguest4e2bd4
 
Optymalizacja Konwersji
Optymalizacja KonwersjiOptymalizacja Konwersji
Optymalizacja KonwersjiInboundWay.com
 
Jak badać korzystanie ze zbiorów cyfrowych: kilka propozycji
Jak badać korzystanie ze zbiorów cyfrowych: kilka propozycjiJak badać korzystanie ze zbiorów cyfrowych: kilka propozycji
Jak badać korzystanie ze zbiorów cyfrowych: kilka propozycjiMarcin Wilkowski
 
User Experience w Analizie Biznesowej
User Experience w Analizie BiznesowejUser Experience w Analizie Biznesowej
User Experience w Analizie BiznesowejAnna Liszewska
 
Przykłady MVP i metod badania rynku startupu
Przykłady MVP i metod badania rynku startupuPrzykłady MVP i metod badania rynku startupu
Przykłady MVP i metod badania rynku startupuAsen Gyczew
 
Lean Canvas - Biznes plan na jednej kartce papieru
Lean Canvas - Biznes plan na jednej kartce papieruLean Canvas - Biznes plan na jednej kartce papieru
Lean Canvas - Biznes plan na jednej kartce papieruKaizen Consulting Sp. z o.o.
 
Analityka dla copywritera - warsztaty dla studentów Collegium da Vinci
Analityka dla copywritera - warsztaty dla studentów Collegium da VinciAnalityka dla copywritera - warsztaty dla studentów Collegium da Vinci
Analityka dla copywritera - warsztaty dla studentów Collegium da VinciWidoczni
 
Audyt UX metodą wędrówki poznawczej
Audyt UX metodą wędrówki poznawczejAudyt UX metodą wędrówki poznawczej
Audyt UX metodą wędrówki poznawczejKaja Toczyska
 
#MTC2018: Jak wdrażać Data Science w twoim biznesie? - Sebastian Malczyk
#MTC2018: Jak wdrażać Data Science w twoim biznesie? - Sebastian Malczyk#MTC2018: Jak wdrażać Data Science w twoim biznesie? - Sebastian Malczyk
#MTC2018: Jak wdrażać Data Science w twoim biznesie? - Sebastian MalczykMobile Trends
 
Researcher / Product Owner (WUD 2012)
Researcher / Product Owner (WUD 2012)Researcher / Product Owner (WUD 2012)
Researcher / Product Owner (WUD 2012)Bartosz Mozyrko
 
Konferencja #e-biznes - Produkt dla realnego świata
Konferencja #e-biznes - Produkt dla realnego świataKonferencja #e-biznes - Produkt dla realnego świata
Konferencja #e-biznes - Produkt dla realnego świataCogision
 
semKRK#15 - Paweł Sokołowski
semKRK#15 - Paweł Sokołowski semKRK#15 - Paweł Sokołowski
semKRK#15 - Paweł Sokołowski semKRK
 
WUD 2009 - Różne sposoby badania użyteczności w społecznościach internetowych
WUD 2009 - Różne sposoby badania użyteczności w społecznościach internetowychWUD 2009 - Różne sposoby badania użyteczności w społecznościach internetowych
WUD 2009 - Różne sposoby badania użyteczności w społecznościach internetowychWorld Usability Day Tour 2009
 
CONVERSION RATE OPTIMIZATION CRO
CONVERSION RATE OPTIMIZATION CROCONVERSION RATE OPTIMIZATION CRO
CONVERSION RATE OPTIMIZATION CRODorota Zys
 
Optymalizacja Konwersji - Search Marketing Week 2013
Optymalizacja Konwersji - Search Marketing Week 2013Optymalizacja Konwersji - Search Marketing Week 2013
Optymalizacja Konwersji - Search Marketing Week 2013InboundWaySMW2013
 
Webankieta wyjaśniona w 15 minut
Webankieta wyjaśniona w 15 minutWebankieta wyjaśniona w 15 minut
Webankieta wyjaśniona w 15 minutWebankieta
 
Systemy rekomendacji, Algorytmy rankingu Top-N rekomendacji bazujące na nieja...
Systemy rekomendacji, Algorytmy rankingu Top-N rekomendacji bazujące na nieja...Systemy rekomendacji, Algorytmy rankingu Top-N rekomendacji bazujące na nieja...
Systemy rekomendacji, Algorytmy rankingu Top-N rekomendacji bazujące na nieja...Bartlomiej Twardowski
 

Similar to DLabs PyData MeetUp 9/03/2017 (20)

Materiały dodatkowe
Materiały dodatkoweMateriały dodatkowe
Materiały dodatkowe
 
Usability - Trudne Pytania
Usability - Trudne PytaniaUsability - Trudne Pytania
Usability - Trudne Pytania
 
Usability Trudne Pytania
Usability Trudne PytaniaUsability Trudne Pytania
Usability Trudne Pytania
 
Optymalizacja Konwersji
Optymalizacja KonwersjiOptymalizacja Konwersji
Optymalizacja Konwersji
 
Jak badać korzystanie ze zbiorów cyfrowych: kilka propozycji
Jak badać korzystanie ze zbiorów cyfrowych: kilka propozycjiJak badać korzystanie ze zbiorów cyfrowych: kilka propozycji
Jak badać korzystanie ze zbiorów cyfrowych: kilka propozycji
 
User Experience w Analizie Biznesowej
User Experience w Analizie BiznesowejUser Experience w Analizie Biznesowej
User Experience w Analizie Biznesowej
 
Przykłady MVP i metod badania rynku startupu
Przykłady MVP i metod badania rynku startupuPrzykłady MVP i metod badania rynku startupu
Przykłady MVP i metod badania rynku startupu
 
Lean Canvas - Biznes plan na jednej kartce papieru
Lean Canvas - Biznes plan na jednej kartce papieruLean Canvas - Biznes plan na jednej kartce papieru
Lean Canvas - Biznes plan na jednej kartce papieru
 
Analityka dla copywritera - warsztaty dla studentów Collegium da Vinci
Analityka dla copywritera - warsztaty dla studentów Collegium da VinciAnalityka dla copywritera - warsztaty dla studentów Collegium da Vinci
Analityka dla copywritera - warsztaty dla studentów Collegium da Vinci
 
Audyt UX metodą wędrówki poznawczej
Audyt UX metodą wędrówki poznawczejAudyt UX metodą wędrówki poznawczej
Audyt UX metodą wędrówki poznawczej
 
#MTC2018: Jak wdrażać Data Science w twoim biznesie? - Sebastian Malczyk
#MTC2018: Jak wdrażać Data Science w twoim biznesie? - Sebastian Malczyk#MTC2018: Jak wdrażać Data Science w twoim biznesie? - Sebastian Malczyk
#MTC2018: Jak wdrażać Data Science w twoim biznesie? - Sebastian Malczyk
 
Researcher / Product Owner (WUD 2012)
Researcher / Product Owner (WUD 2012)Researcher / Product Owner (WUD 2012)
Researcher / Product Owner (WUD 2012)
 
Konferencja #e-biznes - Produkt dla realnego świata
Konferencja #e-biznes - Produkt dla realnego świataKonferencja #e-biznes - Produkt dla realnego świata
Konferencja #e-biznes - Produkt dla realnego świata
 
semKRK#15 - Paweł Sokołowski
semKRK#15 - Paweł Sokołowski semKRK#15 - Paweł Sokołowski
semKRK#15 - Paweł Sokołowski
 
WUD 2009 - Różne sposoby badania użyteczności w społecznościach internetowych
WUD 2009 - Różne sposoby badania użyteczności w społecznościach internetowychWUD 2009 - Różne sposoby badania użyteczności w społecznościach internetowych
WUD 2009 - Różne sposoby badania użyteczności w społecznościach internetowych
 
CONVERSION RATE OPTIMIZATION CRO
CONVERSION RATE OPTIMIZATION CROCONVERSION RATE OPTIMIZATION CRO
CONVERSION RATE OPTIMIZATION CRO
 
Optymalizacja Konwersji - Search Marketing Week 2013
Optymalizacja Konwersji - Search Marketing Week 2013Optymalizacja Konwersji - Search Marketing Week 2013
Optymalizacja Konwersji - Search Marketing Week 2013
 
User-centered design
User-centered designUser-centered design
User-centered design
 
Webankieta wyjaśniona w 15 minut
Webankieta wyjaśniona w 15 minutWebankieta wyjaśniona w 15 minut
Webankieta wyjaśniona w 15 minut
 
Systemy rekomendacji, Algorytmy rankingu Top-N rekomendacji bazujące na nieja...
Systemy rekomendacji, Algorytmy rankingu Top-N rekomendacji bazujące na nieja...Systemy rekomendacji, Algorytmy rankingu Top-N rekomendacji bazujące na nieja...
Systemy rekomendacji, Algorytmy rankingu Top-N rekomendacji bazujące na nieja...
 

DLabs PyData MeetUp 9/03/2017

  • 1. Python w analizie danych Krzysztof Rykaczewski 9 marca 2017 DLabs 1
  • 2. Analiza przypadku: rekomendacje reklam • Problem: niski współczynnik konwersji (CTR) w reklamach online w dużej platformie ad-management w Polsce. 2
  • 6. “Od nieurodzaju do dostatku” • Wolna przestrzeń na półce to towar deficytowy dla sprzedawcy detalicznego. • Sieć umożliwia niemal darmowe udostępnienie informacji o produktach. • Przykłady: • książki, muzyka, filmy, ludzie (znajomi z Facebook-a). 5
  • 8. Od dostatku głowa nie boli. . . • Więcej możliwości wyboru wymaga lepszych filtrów. • Systemy rekomendujące. • Jak “Into Thin Air” spowodowało sukces “Touching the Void”? 7
  • 9. Typy rekomendacji • Redakcyjna i ręcznie uporządkowana. • Lista faworytów. • Lista “właściwych” rzeczy. • Proste agregacje: • top 10 (IMDB), najbardziej popularne, ostatnio dodane. • Dopasowane do indywidualnych użytkowników: • Amazon, Netflix, Filmweb, IMDB, Pandora. 8
  • 11. Najważniejsze problemy 1. Jak zebrać dane do macierzy użyteczności? 2. Ekstrapolowanie nieznanych ocen ze znanych danych. • Głównie interesują nas wysokie oceny. • Chcemy wiedzieć co lubimy, a nie czego nie lubimy. 3. Ewaluacja metod ekstrapolacji. • Jak mierzyć skuteczność systemów rekomendujących? 10
  • 12. Zbieranie ocen/danych • Explicite: • Pytaj ludzi o oceny rzeczy. • Nie działa dobrze w praktyce, bo użytkownicy nie chcą współpracować. • Niewiele ocen — nieskalowalne. • Implicite: • Ucz się ocen z zachowania użytkownika, np. zakup oznacza ocenę. • Co z niskimi ocenami? • W praktyce mamy model mieszany z tych dwóch podejść. 11
  • 13. Ekstrapolowanie nieznanych ocen • Główny problem: • Macierz użyteczności jest rzadka, ponieważ ludzie nie są w stanie ocenić wszystkich/większości rzeczy. • Zimy start (cold start): • Nowe produkty nie mają żadnych ocen. • Nowi użytkownicy nie mają historii. • Trzy podejścia do problemu: • oparte na treści (content-based). • społecznościowe (collaborative), • zmienne ukryte (latent factor). 12
  • 15. Rekomendacje oparte o treść • Główna idea: rekomenduj użytkownikowi rzeczy podobne do rzeczy wcześniej wysoko ocenionych przez niego. • Przykład: • Oceny filmów: rekomenduj filmy z tymi samymi aktorami, tym samym reżyserem, gatunkiem etc. • Strony internetowe, blogi, news: rekomenduj strony o podobnej treści. • Ludzie: rekomenduje tych, z którymi mamy wspólnych znajomych. 13
  • 17. Profil produktu • Dla każdego produktu stwórz jego profil. • Profil to zbiór (wektor) cech: • filmy: twórca, tytuł, aktor, reżyser, etc. • zdjęcia, wideo: metadata, tagi, • ludzie: zbiór znajomych, • tekst: zbiór najważniejszych słów w tekście. 15
  • 18. Profil użytkownika • Użytkownik ocenił produkty o profilach (wektorach): i1, i2, . . ., in. • Możliwe profile użytkownika: • ważona średnia profili ocenionych produktów, • wariant: znormalizuj wagi używając średniej oceny użytkownika, agregacja etc. 16
  • 19. Przykład — boolowska macierz użyteczności • Produkty to filmy, a cechą jest aktor. • Profil filmu to wektor 0 i 1. • Niech użytkownik obejrzał 5 filmów: • 2 z aktorem A, • 3 z aktorem B. • Profile użytkownika — średnia: • waga cechy A = 2/5 = 0.4, • waga cechy B = 3/5 = 0.6. 17
  • 20. Przykład — oceny gwiazdkami • Przykład jak wyżej z ocenami w skali 1–5. • Filmy z A ocenione na 3 i 5. • Filmy z B ocenione na 1, 2 i 4. • Normalizujemy dane: • Dla A: 0, 2. Waga = (0 + 2)/2 = 1 • Dla B: -2, -1, 1. Waga = −2/3. 18
  • 21. Predykcja dla użytkownika • Heurystyka predykcji: • Przyznaj profilowi użytkownika x oraz produktowi i ocenę u(x, i) = cos(x, i) = x · i x · i . (1) 19
  • 22. Plusy tego podejścia • Nie potrzeba informacji od innych użytkowników: brak zimnego startu i problemów z rzadkością danych. • Można rekomendować użytkownikom ze specyficznym gustem. • Można rekomendować nowe i niepopularne produkty. • Dostajemy wyjaśnienie: • Można wytłumaczyć dlaczego rekomendowaliśmy dany produkt poprzez wgląd w cechy, które spowodowały jego rekomendację. 20
  • 23. Minusy podejścia • Znalezienie odpowiednich cech jest trudne, np.: obrazki, filmy, muzyka etc. • Rekomendacje dla nowych użytkowników: jak zbudować profil użytkownika? • Specjalizacja: • nie rekomenduje produktów spoza profilu użytkownika, • ludzie mają wiele zainteresowań, • gusta się zmieniają, • nie można wykorzystać ocen innych użytkowników. 21
  • 25. Filtrowanie społecznościowe • Rozważmy użytkownika x. • Znajdź zbiór N użytkowników o podobnym zestawie ocen do x. • Oszacuj oceny użytkownika x opierając się na ocenach ze zbioru N. 22
  • 26. Znajdowanie podobnych użytkowników • Niech rx oznacza wektor ocen użytkownika x. • Podobieństwo kosinusowe: • sim(x, y) = cos(rx , ry ) = rx ·ry rx · ry . • Problem: takie podobieństwo traktuje brakujące wartości jak negatywne. • Współczynnik korelacji Pearsona: • Sx,y = produkty wspólnie ocenione przez x oraz y. sim(x, y) = rxy = s∈Sx,y (rxs − rx )(rys − ry ) s∈Sx,y (rxs − rx )2 s∈Sx,y (rys − ry )2 . (2) 23
  • 27. Miara podobieństwa • Intuicyjnie chcielibyśmy, żeby sim(A, B) > sim(A, C). • Podobieństwo kosinusowe: 0.386 > 0.322. • Brakujące wartości traktuje jako ujemne. • Rozwiązanie: odejmij średnią (z rzędu) 24
  • 28. Ocena predykcji • Od miary podobieństwa do rekomendacji: • Niech rx to wektor ocen użytkownika x. • Niech N to zbiór k użytkowników najbardziej podobnych do x, którzy wspólnie ocenili produkt i. • Predykcja produktu i dla użytkownika x • rx,i = 1 k y∈N ry,i . • rx,i = y∈N sx,y ry,i y∈N sx,y , gdzie sx,y = sim(x, y). • Wiele innych możliwości. . . 25
  • 30. Filtrowanie społecznościowe produkt-produkt • Do tej pory omawialiśmy filtrowanie społecznościowe użytkownik-użytkownik. • Inne spojrzenie: produkt-produkt. • dla produktu i znajdź podobne, • zweryfikuj ocenę produktu i na podstawie ocen innych produktów, • można użyć podobnych metryk podobieństwa jak w przypadku modelu użytkownik-użytkownik. 27
  • 35. Produkt-produkt vs użytkownik-użytkownik • W praktyce zaobserwowano, że podejście produkt-produkt działa lepiej niż użytkownik-użytkownik. • Dlaczego? Produkty są proste, a użytkownicy mają różne/zmienne gusty. 32
  • 36. Plusy/minusy CF • Plusy: • Działa dla każdego rodzaju produktów. • Minusy: • Zimny start: brak wystarczającej liczby użytkowników do znalezienia dopasowania. • Rzadkość: macierz ocen jest rzadka; ciężko znaleźć dwóch użytkowników, którzy ocenili te same produkty. • Pierwsza ocena: nie można ocenić produktu, który nie był oceniony do tej pory. • Popularność: nie można rekomendować produktu użytkownikowi o indywidualnym guście; dąży do rekomendacji popularnych produktów. 33
  • 37. Metody hybrydowe • Można zaimplementować dwa lub więcej różne systemy rekomendacji i połącz ich predykcje. • Można dodać metody oparte o treść: • profile produktu dla nowych produktów, • dane demograficzne pomogą poradzić sobie z nowymi użytkownikami. 34
  • 39. Ładujemy główne biblioteki 1 # --- Import Libraries --- # 2 import pandas as pd 3 from scipy.spatial.distance import cosine 4 5 # --- Read Data --- # 6 events = pd.read_csv('data.csv') 35
  • 40. Przyjrzyjmy się danym 1 print events.head().ix[:, 2:10] User ID Advertiser ID Campaign ID Banner ID 0 AAAGTHsdebojV3i_I1ddkw 14748 21090 201090 1 AAAGTHsdebojV3i_I1cjkw 14748 21090 201090 2 AAAGTHsdebojV3i_I1dNsQ 14748 21090 200892 3 AAAGTHsdebojV3i_I1dKnw 14748 21090 201090 4 AAAGTHsdebojV3i_I1dKnw 14748 21090 201093 Publisher ID Placement ID Event type Traits (JSON) 0 14751 826507 view [7407] 1 14751 826507 click [7406,7407] 2 14749 826297 view 3 14751 826507 view [7407] 4 14751 4611686018427387905 click [7406,7407] 36
  • 41. Jak wyglądało wstępne przetworznie danych? • Należało uzupełnić brakujące pola Traits. • Z powodów technicznych należało położenie 4611686018427387905 zamienić na inny id. 37
  • 42. Jak wyglądało wstępne przetworznie danych? • Musimy zamienić tę tabelkę na macierz (user,placement)/banner, gdzie wartość pola oznacza liczbę klików (click) przez danego użytkownika w danym położeniu na dany baner. 1 print data.head(4) user_placement 201030 201139 201138 200894... 0 ('AAAGS3tzeAsjV3i_I1ccPA', 827046) 0 1 0 0... 1 ('AAEGTHtpeLYjV3i_I1cj3Q', 632093) 1 0 0 2... 2 ('AAEGTHsPeu4jV3i_I1d-fg', 827455) 1 0 0 0... 3 ('AAAGS3trepkjV3i_I1cjkg', 827145) 0 0 0 0... 38
  • 43. Rekomendacje produkt-produkt 1 # --- Start Item Based Recommendations --- # 2 # Drop any column named "user_placement" 3 data_banner = data.drop('user_placement', 1) 39
  • 44. Rekomendacje produkt-produkt • Zanim policzymy podobieństwa musimy mieć miejsce, żeby je trzymać. • Tworzymy zmienną data_ibs typu ramki danych w pandas (myślmy o tym jak o tabelce w Excel-u). 1 # Create a placeholder dataframe listing item vs. item 2 data_ibs = pd.DataFrame(index = data_banner.columns, 3 columns = data_banner.columns) • Zaczniemy ją wpełniać podobieństwami, a do tego potrzebna nam będzie funkcja podobieństwa cosine. 40
  • 45. Liczenie podobieństwa 1 # Lets fill in those empty spaces with cosine similarities 2 # Loop through the columns 3 for i in range(len(data_ibs.columns)): 4 # Loop through the columns for each column 5 for j in range(len(data_ibs.columns)): 6 # Fill in placeholder with cosine similarities 7 data_ibs.ix[i, j] = 1 - cosine(data_banner.ix[:, i], data_banner.ix[:, j]) • Gdyby to była lista, to możnaby było to zrobić szybciej w list comprehension. 41
  • 46. Szukamy produktów w otoczeniu • Mając policzone podobieństwa w data_ibs dla każdego produktu będziemy poszukiwać produktów, które są mu najbliższe. 1 # Create a placeholder items for closes neighbours to an item 2 data_neighbours = pd.DataFrame(index = data_ibs.columns, 3 columns = range(1, 11)) 4 5 # Loop through our similarity dataframe 6 # and fill in neighbouring item names 7 for i in range(len(data_ibs.columns)): 8 data_neighbours.ix[i, :10] = 9 data_ibs.ix[0:, i].order(ascending = False)[:10].index 10 11 # --- End Item Based Recommendations --- # 42
  • 47. Wyniki: produkt-produkt 1 print data_neighbours.head(6).ix[:6, 2:10] 2 3 4 5 6 7 8 9 201345 201090 200892 201093 200595 201494 200557 200695 200587 200578 200879 201419 200533 200594 201464 201379 200599 200663 201182 200663 201340 201363 201092 201355 201544 201162 201361 200557 200569 200590 201379 201179 200592 200562 201352 201349 201361 200559 200601 201435 200879 201563 201487 200598 201388 201385 201139 201335 201402 201360 200559 201356 200668 200941 43
  • 48. Rekomendacje użytkownik-użytkownik • Proces wygląda następująco: • potrzebujemy macierzy podobieństwa produkt-produkt (mamy!); • sprawdź, które produkty (banery) trafiły do danego użytkownika; • dla każdego klikniętego baneru weź jego otoczenie; • dla tego otoczeniu policz kliknięcia użytkownika; • policz rangę podobieństwa ze wzoru; • rekomenduje te produkty, które mają najwyższą rangę. 44
  • 49. Funkcja podobieństwa 1 # --- Start User Based Recommendations --- # 2 3 # Helper function to get similarity scores 4 def getScore(history, similarities): 5 return sum(history * similarities) / sum(similarities) 45
  • 50. Przygotowanie zmiennych • Tworzymy zmienną na potrzeby przetrzymywania podobieństwa. 1 # Create a place holder matrix for similarities, 2 # and fill in the user name column 3 data_sims = pd.DataFrame(index = data.index, 4 columns = data.columns) 5 data_sims.ix[:, :1] = data.ix[:, :1] 46
  • 51. Wypełniamy podobieństwa I • Wypełniamy macierz wartościami podobieństwa. • Banery, które użytkownik już klinkął są ustawiane na 0, bo nie ma sensu sugerować mu tego jeszcze raz. 47
  • 52. Wypełniamy podobieństwa II 1 #Loop through all rows, skip the user column, 2 # and fill with similarity scores 3 for i in range(len(data_sims.index)): 4 for j in range(1, len(data_sims.columns)): 5 user = data_sims.index[i] 6 product = data_sims.columns[j] 7 8 if data.ix[i][j] == 1: 9 data_sims.ix[i][j] = 0 10 else: 11 product_top_names = data_neighbours.ix[product][1:10] 12 product_top_sims = data_ibs.ix[product].order( ascending = False)[1:10] 13 user_rank = data_banner.ix[user, product_top_names] 14 15 data_sims.ix[i][j] = getScore(user_rank, product_top_sims) 48
  • 53. Rekomendacje użytkownik-użytkownik 1 # Instead of top scores, we want to see banner ids 2 for i in range(len(data_sims.index)): 3 data_recommend.ix[i, 1:] = data_sims.ix[i, :] 4 .order(ascending = False).ix[1:7,].index.transpose() 49
  • 54. Wyniki: użytkownik-użytkownik 1 # Print a sample 2 print data_recommend.ix[:5, :5] user_placement 1 2 3 4 0 ('AAAGS3tzeAsjV3i_I1ccPA', 827046) 200895 201090 200605 201183 1 ('AAEGTHtpeLYjV3i_I1cj3Q', 632093) 201336 201536 201294 201180 2 ('AAEGTHsPeu4jV3i_I1d-fg', 827455) 201347 201091 200593 201419 3 ('AAAGS3trepkjV3i_I1cjkg', 827145) 201344 201338 201359 201146 4 ('AAAGS3tlefEjV3i_I1cMfw', 588717) 200584 200578 200563 200582 50
  • 58. Problemy z pomiarem błędu • Skupienie się na dokładności może spowodować, że zgubimy to czego szukamy. • Różnorodność predykcji. • Kontekst predykcji. • Porządek predykcji. • W praktyce staramy się przewidzieć tylko najwyższe oceny: • RSME: może karać metodę, która dobrze radzi sobie na produktach z wysokimi ocenami, a gorzej na innych produktach. 53
  • 59. CF: złożoność • Koszt znalezienia k najbardziej podobnych użytkowników: O( X ), gdzie X to zbiór użytkowników. • Zbyt kosztowne, żeby wykonać w czasie rzeczywistym. • Można wyliczyć wcześniej. • Naiwny algorytm potrzebuje O(k X ). • Można to przyspieszyć: • Szukanie najbliższych sąsiadów w wysokich wymiarach (LSH). • Grupowanie (clustering). • Redukcja wymiarów. 54
  • 60. Wszystkie dane • Wykorzystaj wszystkie dane: • nie zmniejszaj danych tylko dlatego, żeby jakiś algorytm lepiej działał. • proste metody na dużych danych lepiej sobie radzą. • Dodaj więcej danych: • np. dodaj dane o gatunku w IMDB. • Więcej danych potrafi pobić lepsze algorytmy. 55
  • 61. Referencje • Rysunki zostały zaczerpnięte z: • Mining of Massive Datasets, Jure Leskovec, Anand Rajaraman, Jeff Ullman – Stanford University, 2006 • http://cs246.stanford.edu 56
  • 62. • Dziękuję za uwagę! 57
  • 63. Krzysztof Rykaczewski • Krzysztof Rykaczewski ukończył doktorat z matematyki na Uniwersytecie Mikołaja Kopernika w Toruniu. Karierę rozpoczął pracując na Uniwersytecie Warszawskim. W swoich badaniach koncentruje się przede wszystkim na eksploracji danych, uczeniu maszynowym, analizie nieliniowej oraz teorii sterowania. Autor rozlicznych publikacji oraz recenzent artykułów wielu międzynarodowych czasopism naukowych. • linkedin.com/in/krykaczewski/ • DLabs: dlabs.pl/ 58