2011-12-29

Pentaho Data Mining

Pentaho köpte en licens för Weka 2006, men hur ser integrationen mellan de två ut idag och hur fungerar det? Pentaho har valt att fokusera integrationen på PDI, d.v.s. deras ETL verktyg. I dagsläget finns det transformationssteg och vyer för PDI som kopplar ihop Weka och Pentaho.

PDI transformationssteg 

  • ARFF Output
    Det här tranformationssteget kan användas för att serialisera ut en ARFF fil som är Weka egna filformat. Denna fil kan dock endast användas till utveckling, då det inte finns något "ARFF Input" steg att läsa in datat i PDI igen.
  • Weka Knowledge Flow
    Det här transformationssteget i kombination med Wekas kfKettle paket kan man via PDI hämta data från valfria datakällor och skicka det vidare till ett Weka Knowledge Flow som körs och bygger en modell som sedan sparas som ett Javaobjekt med hjälp av "Serialized ModelSaver". Den sparade modellen används sedan i transformationsstegen "Weka Scoring" eller "Weka Forecasting".
  • Weka Scoring
    Weka Scoring är ett transformationssteg som använder en redan tränad modell för att prediktera eller klassificera inkommande data. Resultatet kan vara en predikterad klass (klassifiering/klustring), ett uppskattat reellt tal (regression) eller en sannolikhetsfördelning (klassifiering/klustring), beroende på vilken modell som används. Resultatet skrivs tillbaka till en databas och kan sedan användas oberoende av programvara för visualisering. 
  • Weka Forecasting
    Weka Forecasing används tillsammans med timeserieForecasting paketet i Weka och fungerar analogt med Weka Scoring, med skillnaden att den använder en tidseriemodell för att göra en prognos för framtiden. 

PDI vyer

  • Knowledge Flow Editor
    Det här är en plugin där Pentaho har lyft in Wekas Knowledge Flow gränssnitt rakt av in i PDI. Det går dock endast att skapa ett helt nytt Knowledge Flow och inte öppna och editera befintliga.
  • Forecasting
    Även detta är en plugin där Pentaho har lyft in Wekas Forecasting gränssnitt rakt av i PDI, men de har dock lagt till ytterligare funktionalitet. Man kan skicka in data i tidsserie analysen direkt från ett "Table output" eller "Table input" steg. Om man högerklickar på någon av dessa och väljer "Forecast" laddas datat från databasen till Forecasting gränssnittet. 
Utöver detta finns det också ett transformationssteg som egentligen inte har någonting med Weka att göra, men som med fördel kan användas tillsammans med Weka och det är "Reservoir Sampling". Den genererar träningexempel från en inkommande dataström där antalet inte är känt i förväg. Den kan användas för att generera ett träningsdataset av lämplig storlek till Weka.

Vad vinner man då på att köra Weka tillsammans med PDI? Det som är smidigt är att man relativt enkelt kan schemalägga och produktionssätta träning av modeller som används i den dagliga analysen med hjälp av transformationsstegen i PDI. Men med det nya wekaServer paketet som släpptes i höstas är det nästan lika enkelt att göra det direkt i Weka. De har övergett det gamla RMI interfacet och istället implementerat en servlet baserad Weka Server som körs på en Jetty web server. Om man redan har PDI i sin miljö eller behöver ett ETL verktyg, absolut kör via PDI. Annars, tveksamt...

2011-12-28

Univariat avvikelsemodellering med PDI

I data mining sammanhang pratar man oftast om "Anomaly detection" eller "Outlier detection". Förutsättningen är att man har en större mängd data där man vill hitta avvikande beteenden. Det första man måste göra är att definiera nyckeltal eller mått där man söker avvikelse. Låt oss ta ett exempel där vi ska hitta avvikande beteende bland anställdas användning av mobiltelefon. Det finns massor av intressant aspekter att analysera, men låt oss ta utlandssamtal som ett exempel. Hur hittar man då avvikande beteende för utlandssamtal. Generellt så är det bra att sätta det i förhållandet till någonting. Hur många utlandssamtal ringer man i förhållande till totala antal samtal? Hur många utlandssamtal ringer man utanför kontorstid i förhållande till på kontorstid? Dessa typer av mått är ofta de som är intressanta att titta på under en tidsperiod som är lång nog för att få statistisk relevans för respektive mått.

När man har definierat de mått man anser vara representativa för det som man söker så är det dags att börja leta avvikelser i datat. Den första ansatsen är ofta univariat analys, d.v.s. man söker efter avvikelser ett mått i taget. Det vanligaste är då att man gör antagandet om normalfördelning och tittar på standardavvikelser och konfidensintervall. En vanlig definition för uteliggare är om abs(x-mean)>3*σ så är x en uteliggare. Problemet med standardavvikelser är att de är känsliga för extrema uteliggare, och i vissa fall när man söker efter avvikelser så finns det just extrema uteliggare. Alternativet är då att istället att titta på percentiler och uteliggare baserat på dessa. Då definierar man ofta uteliggare som x-Q75>1,5*IQR och Q25-x>1,5*IQR där IQR är Q75-Q25.

Om man vill använda Pentaho Data Integration för att skapa ett data mart med mått som standard avvikelser och percentiler ska man kolla in pluginen "Univariate Statistics". I den anger man ett fält som input och kan räkna ut "N, Mean, Std dev, Min, Max, Median, Percentile". I fältet "percentile" anger man vilken percentil man vill räkna ut och man kan lägga till flera i samma transformationssteg. Tyvärr finns det dock inget enkelt sätt att visualisera modellen som man bygger upp. Det hade varit snyggt med t.ex. ett lådagram (box-plot) eller normalfördelningsdiagram i Report Designer för att komplettera rapporterna som använder den underliggande modellen.

Nästa steg är multivariat analys, d.v.s. att hitta avvikelser för flera mått samtidigt. Ifall man arbetar med normalfördelningar är en vanlig algoritm att multiplicera normalfördelningens täthetsfunktion för varje variabel med varandra p(x)=Π p(xjj2j). En uteliggare definieras då som p(x)<ε, d.v.s. ifall produkten av täthetsfunktionerna är mindre än ett gränsvärde ε. Ifall man istället tittar på percentiler kan man även kombinera dessa, men det är inte lika trivialt utan kräver lite mer handpåläggning, men mer om multivariat avvikelsemodellering vid ett annat tillfälle.

2011-12-12

Pentaho Metadata Custom

Hittade en funktionalitet som introducerades i Pentaho Report Designer 3.8 som helt förbigått mig. Det går numera dynamiskt att bygga upp MQL frågan som ställs mot Pentahos metadata modell istället för att använda den inbyggda metadata editorn i Report Designer. Det är dock fortfarande en experimentell funktionallitet som måste aktiveras genom att gå in på "Edit -> Preferences... -> General" och klicka i "Enable (unsupported) experimental features.". När detta är gjort går det att lägga till en ny typ av datakälla som är "Metadata (Custom)". På Pentahos wiki finns det en artikel som går igenom ett enkelt exempel på hur man kan använda denna datakälla för att med hjälp av Report Designers formel editor bygga upp MQL frågan. Detta ger en mycket större flexibilitet i användandet av metadata modellen vilket gör att man kan unvika att skriva rapportspecifik SQL och därmed också minska risken för inkonsistens mellan rapporter i de olika komponenterna i Pentaho BI suite.