SAS Slovakia Newsletter / Tipy a triky

O oversamplingu a iných data miningových príšerách

Vari každý, kto sa niekedy pokúsil zostaviť prediktívny model, sa už stretol s oversamplingom. Len možno nie každý o tom vie. Preto si o ňom niečo povedzme.

V celom článku budeme hovoriť o modeli binárnej premennej, ktorú nazvime Target a jej hodnoty budú 1 (jednotky) a 0 (nuly). Pozorovaniu, pre ktoré nadobúda Target hodnotu 1 (0) budeme tiež pre jednoduchosť hovoriť jednotka (nula).

Čo to vlastne oversampling je? Oversamplingom vzniká vzorka dát, v ktorej je frekvencia výskytu istej hodnoty modelovanej premennej vyššia ako v skutočnej populácii.  Pokiaľ v skutočnej populácii 2 % ľudí kúpi náš tovar, avšak vzorka pre účely modelovania obsahuje 50 % pozorovaní s pozitívnou hodnotou modelovanej premennej, ide o oversampling.

Ku oversamplingu môže dôjsť z rôznych dôvodov, napríklad:

  • Je k dispozícii príliš veľké množstvo dát, ktoré brzdí tvorbu modelu a je potrebné urobiť vzorku. Pokiaľ je istých hodnôt modelovanej binárnej premennej málo, má oveľa väčší zmysel nerobiť proporcionálny sampling, ale vybrať „viac jednotiek a menej núl“ aby sa ich pomer priblížil rovnovážnemu. Pre kvalitu modelu je totiž v tomto prípade dôležitejšie zobrať „rare target“ ako bežný non-target.
  • Z technických alebo iných dôvodov je k dispozícii vzorka dát, o ktorej vopred vieme, že obsahuje percentuálne viac alebo menej targetov ako skutočná populácia. Alebo to o nej dokonca nevieme, ale mali by sme. V tejto situácii sa často postupuje nasledovne: najprv sa vytvorí model na veľkej vzorke dát obsahujúcej dlhú históriu a následne sa v druhom kroku urobí finálna kalibrácia tohto modelu. Prvá fáza urobí model silným v rozlíšení jednotiek a núl a druhá fáza spresní samotný číselný odhad pravdepodobnosti. A práve druhá fáza môže prebehnúť na menšej čerstvej vzorke dát, u ktorej už oversampling nepredpokladáme.
    (Predstavme si, že máme náš výborný model kúpy produktu alebo pravdepodbnosti defaultu. Odrazu nečakane príde zlý škriatok a v našom modeli na konci pridá malú modifikáciu - zníženie odhadnutej pravdepodobnosti na polovicu. Akože sa zmení sila modelu meraná štatistikami ako Lift, Gini, ROC, K-S? Akože sa zmení Average Square Error?)
  • Analytik cielene zvýši percentuálny počet targetov, aby pozoroval vlastnosti vytvoreného modelu na odloženej testovacej množine.

K cielenému oversamplingu však môže viesť napríklad aj mylná predstava. Je napríklad rozšírená téza, že rozhodovací strom sa nedokáže vytrénovať, pokiaľ nemá vyvážené množstvo jednotiek a núl. A to sa netýka len SAS Enterprise Minera, ale všeobecne. Pravdou však je, že to nezávisí na samotnom modeli rozhodovacieho stromu ako takého, ale na trénovacom algoritme, ktorý je použitý. V prípade SAS Enterprise Minera sa tento trénovací algoritmus riadi nastaveniami uzla Decision Tree Node. Štandardné nastavenie je (žiaľ) také, že sa najprv vytvorí strom od koreňa po vetvy a následne sa orezáva. Pri orezávaní sa na vyberá minimálny strom, ktorého istá metrika je čo najvyššia. A práve to je kameň úrazu. Ako štandardná metrika je zvolená „Decision“, inými slovami Misclassification rate. Predstavme si, že v našej vzorke je len 1 % jednotiek. Keďže je malá šanca, že v nejakom uzle sa prehupneme cez 50 %, všetky listy a ich pozorovania sa ohodnotia ako nula a misclassification rate zostáva 1 % (na prvý pohľad výborný výsledok primitívneho modelu). Stači však zmeniť toto nastavenie na “Average Square Error”, alebo “Lift” a zrazu sa aj na vzorke dát s malým množstvom jednotiek vytrénuje pekný strom.

Pokiaľ sa pokúšame cielene zvýšiť počet jednotiek ich roznásobením, teda namnožením každého takéhoto pozorovania, priraďujeme vlastne pôvodnému pozorovaniu istú váhu. A tu nám SAS Enterprise Miner ponúka priamo funkcionalitku, ako nastaviť váhu každého pozorovania. Stačí v každom riadku vyplniť číselnú hodnotu premennej nazvanej napríklad weight a tejto premennej priradiť v metadátach rolu „Frequency“. Potom sa toto pozorovanie správa tak, ako keby ich počet vo vstupnom data sete bol taký, akú hodnotu obsahuje naša premenná weight. A nemusí to byť ani celé číslo. Týmto spôsobom môžeme dosiahnuť namnoženie jednotiek na hoci stonásobok bez zvýšenia veľkosti vzorky, a teda bez negatívneho vplyvu na výkonnosť. Nastavenie váh pozorovaniam môže byť užitočné aj v iných prípadoch.

Čo robiť, ak už máme model, ktorý odhaduje istú pravdepodobnosť a vieme, že sme ho robili na oversampled vzorke? Podľa toho, na čo nám ten model je. Pokiaľ sme len chceli usporiadať potenciálnych oslovených podľa pravdepodobnosti kúpy a osloviť prvých 1000, tak nerobíme už nič. Ani hore spomínaný zlý škriatok nám v tejto situácii nespôsobil žiadny problém. Ak však chceme ozajstnú pravdepodobnosť kúpy, napríklad pre optimalizáciu kampaní, alebo potrebujeme skutočnú pravdepodobnosť zlyhania pre výpočet opravných položiek či kapitálu, potom potrebujeme túto pravdepodobnosť upraviť. Ako na to?

Nech v skutočnej populácii je pravdepodobnosť jednotky pp a na našej vzorke nech je pravdepodobnosť výskytu jednotky  ps. Ak napríklad pp=10%, tak zdvojením každej jednotky dostaneme ps=20/110=18,18% .To znamená, že každá pôvodná jednotka sa vo vzorke nachádzakrát a každá pôvodná nula sa vo vzorke nachádza  krát. Nech náš model ohodnotí nejaké nové pozorovanie pravdepodobnosťou p. Ide teda o p-násobok jednotky zo vzorky a (1-p) - násobok nuly zo vzorky. Po spätnej stransformácii dostaneme  násobok pôvodnej jednotky a - násobok pôvodnej nuly. A teda skutočná pravdepodobnosť je   .

Túto transformáciu môžeme spraviť sami SAS-kódom, avšak vie ju za nás urobiť aj SAS Enterprise Miner sám. Stačí, keď mu ku vstupného data setu vložíme aj informáciu o Prior Probabilities. A to v Input Data Node cez property Decisions v časti Columns , záložka Prior Probabilities.  Potom výsledný model dáva už upravenú pravdepodobnosť nie na základe frekvencií jednotiek v dátach (vo vzorke), ale na základe pravdepodobnosti jednotky v skutočnej populácii.

Ukážka tejto úpravy v rámci generovaného skórovacieho kódu z uzla Regression Node: 

                                                           

Na záver ešte jedno upozornenie. Oversampling môže spôsobiť celkové posunutie rôznych premenných. Model vytvorený na špecifickej podmnožine celej populácie nemusí rovnako dobre fungovať na celej populácii.

Róbert Macho, Senior Consultant, SAS