====== Úkol 6 - Web usage mining ====== * Zpracoval: [[borovto1@fit.cvut.cz|Tomáš Borovička]]. * Po 18:00 * LS 2011 * Source files wum_dataset.zip {{:school:fit:middw:wum_dataset.zip|ZIP}} * RapidMiner middw06RapidMiner.zip {{:school:fit:middw:middw06rapidminer.zip|ZIP}} ===== Zadání ===== === Popis dat === Archiv obsahuje následující data: == clicks.csv == * LocalID - interní identifikátor události * PageID - identifikátor zobrazené stránky * VisitID - identifikátor session * PageName - relativní uri navštívené stránky * CatName, CatID - typ stránky(Navigace), obecnější granularita * ExtCat,ExtCatID - typ stránky (Obsah), konkrétnější granularita * TopicName, TopicID - téma stránky (VHT = vysokohorská turistika) * TimeOnPage - čas na stránce v sekundách. Na poslední stránce v session se předpokládá 30s. Údaj je zaokrouhlen na půlminutové bloky. * PageScore - váha stránky odvozená od času na stránce o a pořadí stránky v clickstreamu t podle heuristiky ''(ln(o)+1)*t'' * SequenceNumber - pořadí stránky v clickstreamu == visitors.csv == * VisitID - identifikátor session * Referrer - anonymizované označení odkazující domény * Den - den započetí návštěvy * Hodina - hodina započetí návštěvy * Delka_sekundy - délka návštěvy v sekundách (součet hodnot TimeOnPage v řádcích se stejným VistiID v clicks.csv) * Delka_pocetstranek - počet navštívených stránek během návštěvy (počet řádků se stejným VistiID v clicks.csv) == search_engine_map.csv == * Referrer - anonymizované označení odkazující domény * Typ_Odkazovace - typ odkazující domény ==== Úkoly ==== === Předzpracování dat === * Navrhněte vhodnou reprezentaci dat pro následné dolování asociačních pravidel a shlukovou analýzu (clustering). * Vytvořte dva soubory, kde každý řádek bude reprezentovat jedno sezení (session) a sloupce budou obsahovat data vhodná pro daný typ úlohy. * V případě váhové funkce zvolte mezi binární, agregovaným časem, nebo agregovaným PageScore. * Odstraňte příliš krátké návštěvy (''Delka_pocetstranek ⇐2''). * Navrhněte a použijte další metody na pročištění dat. * Identifikujte měkké konverze: zobrazení stránky se slevami (''n_sleva.asp'') a s informacemi o přihlášení (''jak_se_prihlasit.htm''), pojištění (''n_pojistenick.asp'') a informacemi o CK (''n_kdojsme.asp''). * Identifikujte tvrdé konverze: zobrazení stránky ''n_prihlaska.asp'', ''n_katalog.asp'' (předpokládejte, že stránka se zobrazuje po úspěšně odeslané přihlášce / žádosti o katalog). === Dolování dat === * Pokuste se v datech nalézt zajímavá asociační pravidla, která se vztahují ke konverzi (konsekvent). * Pokuste se v datech nalézt shluky návštěvníků s podobným profilem (shlukujte především podle atributu TopicName). Pro dolování dat je preferovaným nástrojem [[http://www.cs.waikato.ac.nz/%7Eml/weka/|Weka]]. ===== Shlukování ===== ==== Předzpracování dat ==== * Pro předzpracování dat, stejně jako pro následné dolování dat jsem použil program Rapid Miner. {{:school:fit:middw:preparedatacluster.png|Prepare data for clustering}} - pomocí bloku "Select Attributes" vybereme atributy, které budeme dále zpracovávat - blok "Pivot" vytvoří pivot tabulku podle TopicName - to vytvoří sloupec pro každý TopicName, metriku jsem zvolil TimeOnPage, ale nezáleží na ni, jelikož se nakonec stejně nebere v potaz - další blok "Replace missing" nahradí chybějící atributy nulou - blok "Agregate" agreguje do jednoho řádku (VisitID) všechny témata, které uživatel navšívil - jelikož mě nazajímají hodnoty v agregaci, ale pouze zda uživatel byl nebo nebyl v tématu, pomocí "Numerical to Binominal" převedu hodnoty na true/false a jelikož shlukování pracuje pouze s numerical daty, převedu zpět na 0/1 pomocí "Nominal tu Numerical" (njspíš by to celé šlo i diskretizací) - další bloky už jen upravují výstup, "Select Attributes" vybere atributy, "Rename Attributes" přejmenovává atributy ==== Shlukování ==== {{:school:fit:middw:wholeprocess.png|}} * k shlukování použil jsem "Clustering with k-means" * k = 8 * max runs = 100 * mas optimization steps 1000 ==== Výsledky ==== ^ ^Cluster 0^Cluster 1^Cluster 2^Cluster 3^Cluster 4^Cluster 5^Cluster 6^Cluster 7^ ^Obecne| 0.000| 0.837| 1.000| 1.000| 0.864| 0.354| 0.657| 0.379| ^Turistika| 0.163| 0.271| 1.000| 0.000| 0.158| 0.044| 0.030| 0.051| ^Horska turistika| 0.076| 0.199| 0.118| 0.000| 0.998| 0.048| 0.014| 0.014| ^VHT| 0.038| 0.041| 0.032| 0.014| 0.355| 0.003| 0.030| 0.042| ^Voda| 0.029| 0.034| 0.033| 0.010| 0.061| 0.007| 0.022| 0.013| ^Rafting| 0.022| 0.014| 0.027| 0.011| 0.061| 0.010| 0.019| 0.007| ^Exotika| 0.000| 0.110| 0.128| 0.000| 0.118| 0.010| 0.107| 1.000| ^Neni| 0.060| 0.947| 0.057| 0.010| 0.067| 0.010| 0.063| 0.038| ^Korsika| 0.042| 0.168| 0.073| 0.037| 0.056| 0.109| 0.073| 0.022| ^Pobyty s vylety| 0.052| 0.290| 0.034| 0.023| 0.021| 0.068| 0.036| 0.018| ^Hotelbusy| 0.013| 0.141| 0.069| 0.011| 0.035| 0.048| 0.029| 0.018| ^Lastminute| 0.000| 0.218| 0.147| 0.000| 0.198| 0.027| 1.000| 0.046| ^Poznavaci zajezdy U| 0.211| 0.475| 0.178| 0.057| 0.041| 0.044| 0.089| 0.057| ^Expedice Narocne| 0.041| 0.070| 0.055| 0.015| 0.174| 0.024| 0.076| 0.114| ^Lyze| 0.067| 0.019| 0.009| 0.016| 0.098| 0.020| 0.136| 0.011| ^Lipari| 0.025| 0.141| 0.040| 0.024| 0.021| 0.058| 0.057| 0.022| ^Cyklo| 0.051| 0.072| 0.054| 0.033| 0.083| 0.048| 0.066| 0.020| ^Bulharsko| 0.040| 0.077| 0.018| 0.033| 0.032| 0.088| 0.055| 0.013| ^Poznavaci zajezdy LT| 0.048| 0.700| 0.043| 0.007| 0.015| 0.112| 0.014| 0.008| ^Skolni zajezdy| 0.018| 0.014| 0.006| 0.005| 0.012| 0.010| 0.009| 0.002| ^Ubytovani a doprava| 0.024| 0.043| 0.011| 0.012| 0.015| 0.054| 0.043| 0.005| ^Pobytove| 0.035| 0.158| 0.019| 0.033| 0.018| 0.071| 0.077| 0.019| ^Horolezecka skola| 0.008| 0.012| 0.005| 0.007| 0.135| 0.003| 0.016| 0.006| ^Nezjisten| 0.026| 0.005| 0.007| 0.003| 0.008| 0.003| 0.005| 0.007| ^Cerna Hora| 0.000| 0.070| 0.022| 0.000| 0.024| 1.000| 0.022| 0.001| ^Alpy| 0.028| 0.177| 0.012| 0.007| 0.070| 0.031| 0.025| 0.007| ^Golf| 0.011| 0.007| 0.005| 0.005| 0.003| 0.007| 0.016| 0.002| \\ Ze shluků můžeme vyvodit jaká témata uživatele spojují. Jako směrodatná data jsem vybíral TOP 5 navštěvovaných témat ve shluku a zároveň téma navštívilo více než 10% navštěvníků ze shluku. * **Cluster 0**: Poznávací zájezdy s ubytováním, Turistika * **Cluster 1**: Obecné, Poznávací zájezdy s ubytováním, Pobyty s výlety, Poznávací zájezdy s lechkou turistikou * **Cluster 2**: Obecné, Turistika, Poznávací zájezdy s ubytováním, Lastminute * **Clusetr 3**: Obecné * **Clusetr 4**: Obecné, Horská turistika, Vysokohorská turistika, Last minute, Expedice náročné * **Clusetr 5**: Černá hora, Korsika, Obecné * **Clusetr 6**: Lastminute, Obecné, Lyže, Exotika * **Clusetr 7**: Obecné, Exotika, Expedice náročné ==== Závěry ==== Výsledky odpovídají co bychom očekávali, zjímavé shluky jsou například: Clusetr 4, kde vidíme že uživatele spojují témata **Horská turistika, Vysokohorská turistika, Last minute, Expedice náročné**. Další zajímavým shlukem je Cluster 1, kde uživatele spojují témata **Poznávací zájezdy s ubytováním, Pobyty s výlety, Poznávací zájezdy s lechkou turistikou**. ===== Asociační pravidla ===== ==== Předzpracování dat ==== * Pro předzpracování dat, stejně jako pro následné dolování dat jsem použil program Rapid Miner. {{:school:fit:middw:preparedataassoc.png|}} - nejdříve bylo data potřeba sjoinovat (je nutné nastavit parametr id, podle kterého se joinuje, ten může být jen jeden, proto používám "Set Role") - odfiltrujeme návštěvy, kde je počet zhlédnutých stránek < 3 -> jsou nezajimavé pro asociační pravidla - vytvoříme si sloupce pro měkké a tvrdé konverze "Generate Attributes" - agregujeme (podle VisitID), metriky, které nás zajímají - provedeme diskretizaci a převedeme atributy, které nás zajímají do binomiální podoby (podmínka pro vytváření asoc. pravidel) ==== Asociační pravidla ==== {{:school:fit:middw:wholeprocess.png|}} * Pro tvorbu asociačních pravidel jsem použil "FP-Growth" a "Create Association Rules" * min supprot: 0.01 * min confidence: 0.2 ==== Výsledky ==== ^Premises^Conclusion^Support^Confidence^ ^Tvrdé konverze|||| |sum(TimeOnPage) = range1 [-∞ - 135], maximum(Delka_pocetstranek) = range2 [3.500 - 4.500]|Konverze_tvrde| 0.011973| 0.319797| |sum(TimeOnPage) = range1 [-∞ - 135], maximum(Delka_pocetstranek) = range3 [4.500 - 6.500]|sum(PageScore) = range1 [-∞ - 194], Konverze_tvrde| 0.011022| 0.3625| |sum(TimeOnPage) = range1 [-∞ - 135], maximum(Delka_pocetstranek) = range4 [6.500 - ∞]|sum(PageScore) = range1 [-∞ - 194], Konverze_tvrde| 0.013493| 0.405714| |sum(PageScore) = range1 [-∞ - 194], maximum(Delka_pocetstranek) = range3 [4.500 - 6.500]|Konverze_tvrde| 0.011022| 0.449612| |sum(PageScore) = range1 [-∞ - 194], maximum(Delka_pocetstranek) = range3 [4.500 - 6.500]|sum(TimeOnPage) = range1 [-∞ - 135], Konverze_tvrde| 0.011022| 0.449612| |sum(TimeOnPage) = range1 [-∞ - 135], sum(PageScore) = range1 [-∞ - 194], maximum(Delka_pocetstranek) = range3 [4.500 - 6.500]|Konverze_tvrde| 0.011022| 0.449612| |sum(TimeOnPage) = range1 [-∞ - 135], maximum(Delka_pocetstranek) = range3 [4.500 - 6.500]|Konverze_tvrde| 0.013683| 0.45| |sum(TimeOnPage) = range1 [-∞ - 135], sum(PageScore) = range2 [194 - 429.500]|Konverze_tvrde| 0.014633| 0.458333| |sum(PageScore) = range1 [-∞ - 194], maximum(Delka_pocetstranek) = range4 [6.500 - ∞]|sum(TimeOnPage) = range1 [-∞ - 135], Konverze_tvrde| 0.013493| 0.577236| |sum(TimeOnPage) = range1 [-∞ - 135], maximum(Delka_pocetstranek) = range4 [6.500 - ∞]|Konverze_tvrde| 0.019384| 0.582857| |sum(PageScore) = range1 [-∞ - 194], maximum(Delka_pocetstranek) = range4 [6.500 - ∞]|Konverze_tvrde| 0.013683| 0.585366| |sum(TimeOnPage) = range1 [-∞ - 135], sum(PageScore) = range1 [-∞ - 194], maximum(Delka_pocetstranek) = range4 [6.500 - ∞]|Konverze_tvrde| 0.013493| 0.586777| ^Měkké konverze|||| |sum(TimeOnPage) = range1 [-∞ - 135], maximum(Delka_pocetstranek) = range2 [3.500 - 4.500]|Konverze_mekke| 0.010832| 0.28934| |sum(TimeOnPage) = range1 [-∞ - 135], maximum(Delka_pocetstranek) = range4 [6.500 - ∞]|Konverze_mekke| 0.013873| 0.417143| |sum(TimeOnPage) = range1 [-∞ - 135], maximum(Delka_pocetstranek) = range3 [4.500 - 6.500]|sum(PageScore) = range1 [-∞ - 194], Konverze_mekke| 0.012733| 0.41875| |sum(TimeOnPage) = range1 [-∞ - 135], maximum(Delka_pocetstranek) = range3 [4.500 - 6.500]|Konverze_mekke| 0.014823| 0.4875| |sum(PageScore) = range1 [-∞ - 194], maximum(Delka_pocetstranek) = range3 [4.500 - 6.500]|Konverze_mekke| 0.012733| 0.51938| |sum(PageScore) = range1 [-∞ - 194], maximum(Delka_pocetstranek) = range3 [4.500 - 6.500]|sum(TimeOnPage) = range1 [-∞ - 135], Konverze_mekke| 0.012733| 0.51938| |sum(TimeOnPage) = range1 [-∞ - 135], sum(PageScore) = range1 [-∞ - 194], maximum(Delka_pocetstranek) = range3 [4.500 - 6.500]|Konverze_mekke| 0.012733| 0.51938| ==== Závěr ==== Ve výsledku můžeme vidět několik zajímavých asociačních pravidel vedoucích ke konverzím, například je vidět, že čím více stránek u6ivatel navštíví, tím větší je pravděpodobnost konverze (měkké i tvrdé). Například je vidět, že pokud uživatel navštívil více než 6 stránek, udělal z 60% tvrdou konverzi a z 50% měkkou konverzi. Zajimavé také může být, že 60% uživatelů, kteří strávili na stránkách méně než 135 vteřin a zároveň zhlédli více než šest stránek udělalo tvrdou konverzi. Jinak jsou mnou získaná asociační pravidla nepříliš zajímavá a chtělo by to lépe předzpracovat vstupní data.