« George Lakoff om det politiska språket | Main | Författarkopplingar och andra kulturrekommenderare »
oktober 29, 2003
Extremvärdesanalys av webbesök
Extremvärdesanalys (extreme value analysis) är en fascinerande statistisk metod där man, med hjälp tidigare värden, kan estimera förväntat maximalt värde i framtiden. T.ex. kan man estimera maximal vattennivå i en flod, och kan då anpassa resurser (skydd) efter detta värde.Ett förklarande exempel med nyttan av extremvärdesanalys finns i On Extremes and Crashes (PDF) av Alexander J. McNeil. Se även nedan för andra referenser.
Analys
Här görs två extremvärdesanalyser (i R) av antal besök per dag på min sajt (www.hakank.org). Båda analyserna har som startdatum 2003-06-18, dagen jag började blogga.
Nyttan att göra en extremvärdesanalys på min sajt är kanske inte så stor eftersom det är är så få besök. För mig är det snarare att stilla nyfikenheten. Däremot kan det vara viktigt för mer välbesökta sajter för att anpassa antal servers etc.
Datafiler
Datafilerna finns här: blogg_tid_sep30.dat samt blogg_tid_oct28.dat. De tre fälten i filerna är
månad, dag, antal besök
. Endast det tredje värdet används nedan.
30 september-analysen
Först den analys som gjordes för en knapp månad sedan, som använder data från 2003-06-18 till och med 2003-09-30. Vi ser sedan hur väl analysen slog ut.
Paketet evir kan laddas ner här. Se även referenserna nedan.
> library(evir) # ta bara med tredje kolumnen, dvs besöken > web.hits.sep30<-read.table("blogg_tid_sep30.dat",h=T,sep=" ")[,3]Nu använder vi evirs funktioner
gev
samt rlevel.gev
för att estimera extremvärdet. Parametern 100 i rlevel.gev
anger hur många dagar framåt man vill studera.
> web.hits.sep30.gev<-gev(web.hits.sep30) > rlevel.gev(web.hits.sep30.gev,100) [1] 1367.577 1578.583 2071.990De tre värden som
rlevel.gev
returneras är:- den lägre 5%-gränsen i konfidensintervallet (1367.577)
- det förväntade maximumvärdet (1578.583)
- den högre 95%-gränsen i konfidensintervallet (2071.990)
Så, de närmsta 100 dagarna efter 30 september kunde jag som max förvänta mig 1578 besök. Det fanns 5% sannolikhet att det skulle bli fler än 2072 besök eller färre än 1368 besök per dag.
Låt oss nu även studera de kommande 30 dagarna (dvs oktober). Vi kan då kan kontrollera hur bra förutsägelsen var. En sådan 30-dags-analys ger:
> rlevel.gev(web.hits.sep30.gev,30) [1] 1192.267 1326.222 1586.469dvs förväntat max-värde för de 30 närmsta dagarna är (var) 1326 träffar, med konfidensintervallen 1192 respektive 1586 besök.
Facit
Vilket maxvärde blev det då under oktober (så långt vi nu kommit i månaden)? Vi läser in datafilen och ser vilket maxvärdet det blev:
> web.hits.oct28<-read.table("blogg_tid_oct28.dat",h=T,sep=" ")[,3] > max(web.hits.oct28) [1] 2051Det blev 2051 träffar, vilket var rätt oväntat. Och skoj för mig!
Vi kan nu även studera de kumulerade max-värdena (till och med 28 oktober), dvs de som efterhand blir max-värden. Detta görs med funktionen
cummax
. Man ser här hur länge ett visst värde varit max-värde, tills ett nytt sådant kommer.
> cummax(web.hits.oct28) [1] 674 739 739 739 739 739 739 739 739 739 739 739 739 739 739 [16] 739 739 739 739 739 739 739 739 813 813 813 813 813 813 813 [31] 813 813 813 813 813 813 813 956 956 956 956 956 956 956 956 [46] 956 956 956 956 991 991 991 991 991 991 991 991 991 991 991 [61] 991 991 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 1107 [76] 1107 1107 1107 1107 1107 1107 1107 1107 1107 1520 1520 1520 1520 1520 1520 [91] 1520 1520 1676 1676 1676 1676 1676 1676 1676 1676 1676 1676 1676 1676 1676 [106] 1676 1676 1676 1676 1676 1710 1710 1710 1710 1710 1710 1710 1710 1710 1710 [121] 1710 1710 1710 1710 1710 1710 2051 2051 2051 2051 2051 2051 2051För att enbart lista de uppkomna max-värden används
unique
:
> unique(cummax(web.hits.oct28)) [1] 674 739 813 956 991 1107 1520 1676 1710 2051
28 oktober-analysen
Här är den (nyss gjorda) analysen som nu inkluderar de besök som gjorts till och med 28 oktober (fortfarande från 2003-06-18).
> web.hits.oct28.gev <- gev(web.hits.oct28)Vi testar först med 30 dagar:
> rlevel.gev(web.hits.oct28.gev,30) [1] 1572.685 1804.349 2244.556Dvs, den närmsta månaden kan jag förvänta mig max 1804 besök. Det finns dock 5% chans (risk, möjlighet) att det blir över 2245 besök. Med 100 dagar:
> rlevel.gev(web.hits.oct28.gev,100) [1] 1886.486 2295.388 2823.097Låt oss avsluta med estimeringen av max-värdet under det kommande året (365 dagar).
> rlevel.gev(web.hits.oct28.gev,365) [1] 2185.355 2880.037 4725.287Oj!
Plot
Här är en plot på antal besök per dag, från 18 juni till 28 oktober. Inget fancy men man ser tendenserna tydligt.
> plot(web.hits.oct28,type="l")

Att läsa och ladda ner
Här är ett urval av det material om extremvärdesanalys jag stött på.
Introduktioner: It's a record
The extreme value fallacy On Extremes and Crashes (PDF)
Mer teoretisk är Statistical Methods for Extreme Values (PS) av Stuart Coles och Jonathan Tawn.
Några som skrivit om ämnet:
Alec Stephenson
Stuart Coles
Alexander J. McNeil
Coles har även skrivit boken An Introduction to Statistical Modeling of Extreme Values som jag skulle vilja lägga rabarber på, men den är rätt dyr ($79.95).
Det finns några R-paket att ladda ner. Se Software for Extreme Value Theory (Stephensons sajt). Där finns bland annat paketet evir som jag använde i analyserna.
Posted by hakank at oktober 29, 2003 11:12 FM Posted to