Turuhinna määramine veebiroboti ja masinõppega Turuhinna määramine veebiroboti ja masinõppega
itte ainult korporatsioonide finantsjuhid, vaid ka väikeettevõtjad ja tarbijad tahaksid teada asjade turuväärtust, olgu nendeks korterid, jalgrattad või autod. Tänapäeva maailmas müüakse asju ja müügihinna saab teada internetist, kuid täpselt samasugust jalgratast, täpselt samasugust sülearvutit või vankrit ei ole lihtne leida ega ole ka mõistlik otsida. Mida teha siis, kui on soov iga hinna eest õiglaselt ja miks mitte ka põhjaliku turu-uuringuna kindlaks teha asja turuväärtus? Kasutame selleks kahte tehnoloogiat: veebirobotit (ingl web scraping) ja masinõpet.
Vaatleme ühte autode näidet. Analüüsiks kasutatud programmikoodi panin üles Githubi, et see artikkel ei jääks pelgalt teoreetiliseks, vaid et huvilised saaksid samu tööriistasid enda äris või tarbimises kasutada. Niisiis on meie näites ettevõte, mille autopargis on Toyota Avensised ja milles tahetakse võimalikult täpselt kindlaks teha nende turuväärtus. Esimese asjana käivitatakse veebirobot – see kõlab hullemini, kui see tegelikult on –, mis laadib populaarsest automüügiportaalist alla andmed ligi 300 portaalis müüdava kasutatud Toyota Avensise kohta.
Allalaaditud turuandmed näevad välja sellised (osaline vaade) PILT
280 või 290 müügikuulutust ei kujuta endast eriti suurt võrdlusbaasi, aga nendega saab teha nii mõndagi. Näiteks saab teada, et kõige enam müüakse autosid, mille läbitud kilometraaž jääb vahemikku 150 000–200 000 (neid on peaaegu 70 tk), samas on kuni 50 000 kilomeetrit läbinud sõidukeid müügil alla 60. PILT
Kokkuvõttes tuleb välja, et keskmine müüdav kasutatud Toyota Avensis on 2010. aasta mudel, mis on läbinud 163 000 kilomeetrit ja mille hind on 8133 eurot.
Mida siis teha, et määrata kindlaks oma autopargi sõidukite hind? Eeldame, et mul on 2017. aasta Avensis, sedaan, millega on sõidetud 21 000 kilomeetrit (tean, et sõidan vähe). Kui palju saab selle eest küsida? Ja et see kindlalt ära müüa? Selleks, et mitte taga ajada kasutatud autode kuulutustes võimalikult sarnast autot, võiksime kasutada lineaarset regressiooni. Githubis üles riputatud koodiga arvutangi välja tavalise regressiooni ja saan determinatsioonikordajaks hästi natuke üle 0,9. Iseenesest ei ole see väga halb, aga kui ma soovin veel suuremat täpsust? Siis kasutan mitmeid erinevaid regressioonivõimalusi ja vaatan, millised determinatsioonikordajad üldjuhul saab. PILT
Paistab, et nii gradient boosting’u kui ka puid (otsustuspuu, ingl decision tree) ja metsa (otsustusmets, ingl random forest) meenutavate regressioonide abil peaks saama hinda täpsemalt ennustada. Uurime siis, kui palju nad hinnas eksivad. Selleks arvutame välja keskmise absoluutse vea (ingl mean absolute error, MAE) ja võrdleme nende regressioonide põhjal ennustatud hinda autohindadega, mida me juba teame. PILT
Tõepoolest selgub, et kõigi n-ö tavaregressioonide ja ka KN-i puhul eksitakse hinnas üle tuhande euroga, samal ajal kui otsustuspuu, otsustusmets ja … – kuidas siis gradient boosting eesti keeles on? – eksiksid vähem kui tuhandega.
Järgnevalt valin regressiooniks gradient boosting’u ja seadistan selle hüperparameetreid ehk teisisõnu üritan seda niimoodi paremaks teha, et see sobiks meie ülesande jaoks võimalikult hästi (seadistamise kood on samuti Githubis). Lõpuks on mul olemas väike ärapeidetud nn valideerimistabel, mille peal saan seadistatud algoritmi kasutada ja näha, kui täpselt see suudab praktikas hinda ennustada, võrreldes turuga. PILT
Kui proovin autode hinda ennustada selles peidetud tabelis, siis paistab, et minu optimeeritud gradient boosting’u algoritmi kasutades eksitakse päris hinnas keskmiselt 816 euroga, aga lineaarse regressiooni puhul 1403 euroga. Seega tundub, et moodsama algoritmina eksib gradient boosting hinnas vähem. Lõpuks püüan enda auto turuhinda ennustada: algoritm pakub hinnaks 21 000 eurot, pluss-miinus 816 eurot. See peakski olema hind, mis portaalis üles panna, aga iseasi on see, kas selle hinnaga saab auto kohe ära müüa.
Muide, mis te arvate, kas autohinna juures on tähtsam vanus või kilometraaž? Vastus on olemas sealsamas Githubi näites.