Microsoft Word - Andrej_Meh_Diploma.doc

Podobni dokumenti
ŠTEVCI PROMETA IN NJIHOVA UPORABA ZA NAMENE STATISTIK ČRT GRAHONJA

Diapozitiv 1

TRGOVSKI PORTAL SPLETNA APLIKACIJA NAMENJENA TRGOVCEM POGOSTA VPRAŠANJA IN ODGOVORI Ljubljana, Verzija 1.0

Document ID / Revision : 0519/1.3 ID Issuer System (sistem izdajatelja identifikacijskih oznak) Navodila za registracijo gospodarskih subjektov

Verjetnost in vzorčenje: teoretske porazdelitve standardne napake ocenjevanje parametrov as. dr. Nino RODE prof. dr. Blaž MESEC

COBISS3/Medknjižnična izposoja

1 MMK - Spletne tehnologije Vaja 5: Spletni obrazci Vaja 5 : Spletni obrazci 1. Element form Spletni obrazci so namenjeni zbiranju uporabniških podatk

DN5(Kor).dvi

BYOB Žogica v vesolju Besedilo naloge Glavna ideja igre je paziti, da žoga ne pade na tla igralne površine, pri tem pa zbrati čim več točk. Podobno ig

7. VAJA A. ENAČBA ZBIRALNE LEČE

Microsoft Word - M docx

Microsoft Word - CNC obdelava kazalo vsebine.doc

Strojna oprema

10. Meritev šumnega števila ojačevalnika Vsako radijsko zvezo načrtujemo za zahtevano razmerje signal/šum. Šum ima vsaj dva izvora: naravni šum T A, k

LABORATORIJSKE VAJE IZ FIZIKE

RAM stroj Nataša Naglič 4. junij RAM RAM - random access machine Bralno pisalni, eno akumulatorski računalnik. Sestavljajo ga bralni in pisalni

Urejevalna razdalja Avtorji: Nino Cajnkar, Gregor Kikelj Mentorica: Anja Petković 1 Motivacija Tajnica v posadki MARS - a je pridna delavka, ampak se

Podatkovni model ER

Microsoft Word - Analiza rezultatov NPZ matematika 2018.docx

INFORMATOR BIROKRAT 1/2011

Folie 1

PowerPoint Presentation

2019 QA_Final SL

Microsoft Word - SI_vaja1.doc

Poročilo za 1. del seminarske naloge- igrica Kača Opis igrice Kača (Snake) je klasična igrica, pogosto prednaložena na malce starejših mobilnih telefo

Optimizacija z roji delcev - Seminarska naloga pri predmetu Izbrana poglavja iz optimizacije

Kazalo 1 DVOMESTNE RELACIJE Operacije z dvomestnimi relacijami Predstavitev relacij

Delavnica Načrtovanje digitalnih vezij

STAVKI _5_

INFORMATOR BIROKRAT 1/2011

Navodila Trgovina iCenter

GHOSTBUSTERS navodila za učitelje O PROJEKTU S tem projektom se učenci sami naučijo izdelati igro. Ustvariti morajo več ikon (duhcov ali kaj drugega)

Zbornica zdravstvene in babiške nege Slovenije Zveza strokovnih društev medicinskih sester, babic in zdravstvenih tehnikov Slovenije Stanje:

3. Preizkušanje domnev

MATLAB programiranje MATLAB... programski jezik in programersko okolje Zakaj Matlab? tipičen proceduralni jezik enostaven za uporabo hitro učenje prir

Učinkovita izvedba algoritma Goldberg-Tarjan Teja Peklaj 26. februar Definicije Definicija 1 Naj bo (G, u, s, t) omrežje, f : E(G) R, za katero v

PRIPOROČILA ZA OBLIKOVANJE KATALOGOV ZNANJA ZA MODULE V PROGRAMIH VIŠJEGA STROKOVNEGA IZOBRAŽEVANJA

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Statistika Pisni izpit 6. julij 2018 Navodila Pazljivo preberite be

NAVODILA ZA UPORABO K01-WIFI Hvala, ker ste se odločili za nakup našega izdelka. Pred uporabo enote skrbno preberite ta Navodila za uporabo in jih shr

Komisija za študijske zadeve UL Medicinske fakultete Vrazov trg 2 SI-1000 Ljubljana E: T: Režim študija Predmet: Uvod

Excel 2016

Postopek poracuna 2007 za JU

Microsoft Word - Seštevamo stotice.doc

Datum in kraj

Diapozitiv 1

VST: 1. kviz

Gimnazija Bežigrad Peričeva Ljubljana OPERACIJSKI SISTEM Predmet: informatika

Navodila za programsko opremo FeriX Namestitev na trdi disk Avtor navodil: Martin Terbuc Datum: December 2007 Center odprte kode Slovenije Spletna str

4.Racionalna števila Ulomek je zapis oblike. Sestavljen je iz števila a (a ), ki ga imenujemo števec, in iz števila b (b, b 0), ki ga imenujemo imenov

Miluma Trader Miluma Trader navodila: V nadaljevanju sledijo osnovna navodila, kako začeli uporabljati Miluma Trader. 1. Preverite spletno stran Ta po

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Verjetnost Pisni izpit 5. februar 2018 Navodila Pazljivo preberite

N

Ime in priimek: Vpisna št: FAKULTETA ZA MATEMATIKO IN FIZIKO Oddelek za matematiko Statistika Pisni izpit 31. avgust 2018 Navodila Pazljivo preberite

(Microsoft PowerPoint _IZS_izobraevanje ZK_1_del.ppt [Zdru\236ljivostni na\350in])

Avtomatizirano modeliranje pri celostnem upravljanju z vodnimi viri

Microsoft Word - SI_vaja5.doc

Univerza v Ljubljani FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Tržaška c. 25, 1000 Ljubljana Realizacija n-bitnega polnega seštevalnika z uporabo kvan

Priloga 1: Pravila za oblikovanje in uporabo standardiziranih referenc pri opravljanju plačilnih storitev Stran 4012 / Št. 34 / Uradni lis

rm.dvi

Microsoft Word - Analiza rezultatov NPZ slovenscina 2018.docx

Microsoft PowerPoint - Objekti_gradnja.ppt

Osnove statistike v fizični geografiji 2

Microsoft Word - avd_vaje_ars1_1.doc

Microsoft Word - UP_Lekcija04_2014.docx

Microsoft Word - M _mod..docx

Microsoft Word - M docx

Orodje za izvoz podatkov

%

Poskusi s kondenzatorji

Microsoft PowerPoint - cigre_c2_15.ppt [Compatibility Mode]

ANALITIČNA GEOMETRIJA V RAVNINI

Model IEUBK za napoved vsebnosti svinca v krvi otrok in njegova uporaba na primeru Zgornje Mežiške doline

Navodila za uporabo programske opreme OTRS verzija Administracijska navodila Avtor navodil: Sebastijan Šilec Datum: December 2007 Center odprte

NEVTRIN d.o.o. Podjetje za razvoj elektronike, Podgorje 42a, 1241 Kamnik, Slovenia Telefon: Faks.: in

GOALS

TRGOVSKI PORTAL SPLETNA APLIKACIJA NAMENJENA TRGOVCEM NAVODILA ZA REGISTRACIJO IN PRIJAVO Ljubljana, Verzija 1.1,

PRILOGA 2 Minimalni standardi kakovosti oskrbe za izbrane dimenzije kakovosti oskrbe in raven opazovanja posameznih parametrov kakovosti oskrbe 1. NEP

Zadeva: Ponudba

MERE SREDNJE VREDNOSTI

TRGOVSKI PORTAL SPLETNA APLIKACIJA NAMENJENA TRGOVCEM NAVODILA ZA REGISTRACIJO IN PRIJAVO Ljubljana, Verzija 1.1

Microsoft Word - WP5 D15b infopackage supplement public buildings Slovenia.doc

Microsoft Word - A-3-Dezelak-SLO.doc

MERJENJE GORIŠČNE RAZDALJE LEČE

Osnove matematicne analize 2018/19

ENV2:

4. tema pri predmetu Računalniška orodja v fiziki Ljubljana, Grafi II Jure Senčar

BDV-N890W/BDV-N790W

Loterija Slovenije, d. d. Ljubljana, Gerbičeva ulica 99 Pravila igre na srečo TikiTaka Številka: Ljubljana, VLADA REPUBLIKE SLOV

Dolgoročna zanesljivost.

3. Metode, ki temeljijo na minimalnem ostanku Denimo, da smo z Arnoldijevim algoritmom zgenerirali ON bazo podprostora Krilova K k (A, r 0 ) in velja

PowerPointova predstavitev

Hiter začetek Razširjevalnik dosega WiFi N300 Model EX2700

Microsoft Word - M docx

2

AKCIJSKO RAZISKOVANJE INOVACIJSKI PROJEKT ZA ZNANJE IN SPOŠTOVANJE Udeleženci: Učenci 2. c Razredničarka: Irena Železnik, prof. Učni predmet: MAT Učna

Osnove verjetnosti in statistika

PKP projekt SMART WaterNet_Opis

Turingov stroj in programiranje Barbara Strniša Opis in definicija Definirajmo nekaj oznak: Σ abeceda... končna neprazna množica simbolo

Poročanje izdanih računov pri gotovinskem poslovanju

Transkripcija:

Andrej Meh NAPOVEDOVANJE VREDNOSTI Z ALGORITMOM K NAJBLIŽJIH SOSEDOV Diplomsko delo Maribor, september 2009

2 Diplomsko delo visokošolskega strokovnega študijskega programa NAPOVEDOVANJE VREDNOSTI Z ALGORITMOM K NAJBLIŽJIH SOSEDOV Študent: Študijski program: Smer: Mentor: Somentor: Andrej Meh VS računalništvo in informatika Programska oprema doc. dr. Damjan Strnad, univ.dipl.inž. rač. in inf. red. prof. dr. Nikola Guid, univ.dipl.inž. elektrot. Maribor, september 2009

3 ZAHVALA Zahvaljujem se mentorju doc. dr. Damjanu Strnadu za pomoč in vodenje pri opravljanju diplomskega dela. Prav tako se zahvaljujem somentorju red. prof. dr. Nikoli Guidu. Posebna zahvala velja staršem, ki so mi vso pot stali ob strani, me podpirali in mi omogočili študij.

4 NAPOVEDOVANJE VREDNOSTI Z ALGORITMOM K NAJBLIŽJIH SOSEDOV Ključne besede: napovedovanje vrednosti, kolektivna inteligenca, algoritem knn, spletne dražbe. UDK: 004.8(043.2) Povzetek V diplomskem delu smo predstavili uporabo algoritma k najbližjih sosedov za napovedovanje vrednosti predmetov glede na njihove lastnosti. Implementirali smo testni program in preučili delovanje algoritma na podatkih iz resničnega sveta. S pomočjo testnega programa smo ocenili učinkovitost algoritma. Predlagali smo še nekaj možnih izboljšav za naš program.

5 VALUE PREDICTION USING K NEAREST NEIGHBOURS ALGORITHM Key words: value prediction, collective intelligence, knn algorithm, internet auctions. UDK: 004.8(043.2) Abstract In this diploma work we described the use of k nearest neighbours algorithm for predicting value of objects, depending on their properties. We implemented a test program, and studied how the algorithm worked on real-world data. We evaluated the algorithms efficiency using our test program. We also suggested a couple of possible improvements for our program.

6

7 VSEBINA 1 UVOD...10 2 ALGORITEM K NAJBLIŽJIH SOSEDOV...12 2.1 Kaj je kolektivna inteligenca...12 2.2 Problem napovedovanja vrednosti...13 2.3 Aplikativna uporaba...14 2.4 Koncept algoritma...15 2.5 Primerjalna funkcija...16 2.6 Prilagajanje spremenljivk...17 2.7 Utežene spremenljivke...18 2.8 Optimizacija uteži...19 2.9 Izračun vrednosti...21 3 PROGRAM ZA PRIPOROČANJE CENE...25 3.1 Namen testne implementacije...25 3.2 Koncept delovanja...26 3.3 Vmesnik ebay...28 3.4 Realni podatki...30 3.5 Filtriranje podatkov...32 3.6 Primerjalna funkcija...33 3.7 Prilagajanje in utežitev spremenljivk...34 3.8 Optimizacija uteži...35 3.9 Izračun napovedi vrednosti...36 3.10 Ocena napovedane vrednosti...38 3.11 Predlogi za izboljšanje programa...40 4 PREIZKUS ALGORITMA S TESTNIM PROGRAMOM...41 4.1 Primer napovedi vrednosti...41 4.2 Način preizkušanja...42 4.3 Priprava testnih podatkov...43 4.4 Rezultati preizkušanja z umetnimi podatki...44 4.4.1 Brez uporabe prilagajanja in uteži lastnosti...45 4.4.2 Brez uporabe uteži lastnosti...46 4.4.3 Brez uporabe uteži sosedov...47 4.4.4 Z uporabo prilagajanja in uteži lastnosti...47 4.5 Rezultati preizkušanja z realnimi podatki...49 4.6 Rezultati preizkušanja s prečiščenimi realnimi podatki...50 4.7 Ocena rezultatov...51 5 ZAKLJUČEK...53 6 LITERATURA...55 7 PRILOGE...56 7.1 Kratek življenjepis...56 7.2 Vsebina priložene zgoščenke...57

8 SEZNAM SLIK Slika 2.1: Psevdo-kod algoritma uteženega knn Slika 2.2: Psevdo-kod algoritma simuliranega ohlajanja Slika 2.3: Graf inverzne funkcije Slika 2.4: Graf odštevalne funkcije Slika 2.5: Graf Gaussove funkcije Slika 3.1: Glavni del uporabniškega vmesnika Slika 3.2: Testni del uporabniškega vmesnika Slika 3.3: Prikaz koncepta delovanja testnega programa Slika 3.4: Primer zahtevka FindItemsAdvanced Slika 3.5: Izsek iz odgovora na FindItemsAdvanced Slika 3.6: Primer zahtevka GetSingleItem Slika 3.7: Izsek iz odgovora na GetSingleItem Slika 3.8: Primer stavka SQL Slika 3.9: Psevdo-kod algoritma primerjalne funkcije Slika 3.10: Psevdo-kod algoritma uteženega povprečja sosedov Slika 3.11: Psevdo-kod algoritma inverzne funkcije Slika 3.12: Psevdo-kod algoritma odštevalne funkcije Slika 3.13: Psevdo-kod algoritma Gaussove funkcije Slika 3.14: Primer obarvanja napovedi vrednosti glede na kvaliteto ocene SEZNAM PREGLEDNIC Preglednica 4.1: Vmesne vrednosti izračuna napovedi Preglednica 4.2: Povprečne napake brez prilagajanja in uteži lastnosti Preglednica 4.3: Povprečne napake brez uporabe uteži lastnosti Preglednica 4.4: Povprečne napake brez uporabe uteži sosedov Preglednica 4.5: Povprečne napake z lastnimi utežmi Preglednica 4.6: Povprečne napake z optimiziranimi utežmi Preglednica 4.7: Uteži lastnosti, izračunane z optimizacijo, za realne podatke Preglednica 4.8: Povprečna napaka z uporabo optimiziranih uteži Preglednica 4.9: Rezultati preizkusa na prečiščenih podatkih

9 SEZNAM ENAČB Enačba 2.1: Evklidska razdalja Enačba 2.2: Izračun faktorja za prilagoditev lastnosti Enačba 2.3: Standardizacija Enačba 2.4: Inverzna funkcija Enačba 2.5: Odštevalna funkcija Enačba 2.6: Gaussova funkcija Enačba 3.1: Vrednost z Enačba 3.2: Uteženo povprečje Enačba 3.3: Standardno odstopanje Enačba 4.1: Povprečna napaka napovedi UPORABLJENE KRATICE knn kw URL SQL XML algoritem k najbližjih sosedov(k Nearest neighbors) kilowatt, merska enota za moč uniform resoruce locator, kratica za spletni naslov structured query language, kratica za povpraševalni jezik extensible markup language, kratica za zapis podatkov

10 1 UVOD Vsi poznamo spletni iskalnik Google. Večina med nami ga po vsej verjetnosti uporablja vsak dan. Ustanovljen je bil leta 1998, v času, ko je bilo na internetu že prisotnih več velikih iskalnikov. Nihče ni verjel, da se jim bo novinec lahko postavil po robu. Ustanovitelja Googla sta izbrala popolnoma nov pristop do razvrščanja rezultatov iskanja. Pri določanju najboljših zadetkov sta upoštevala povezave na milijonih drugih spletnih straneh. Sprva sta poskušala algoritem prodati že prisotnim velikim podjetjem, a brez uspeha. Vsi so spregledali priložnost, ki se jim je ponujala, zato sta se odločila, da podjetje ustanovita sama. Z uporabo svojega algoritma sta dobila rezultate iskanja, ki so bili toliko boljši od konkurence, da je Google že leta 2004 izvedel približno 85 % vseh iskanj na internetu. Skrivnost Googla in njegovega uspeha tiči v uporabi dovršenih novih metod iz skupine kolektivne inteligence (Collective Intelligence). Te metode zbirajo veliko količino podatkov iz različnih virov. Iz zbranih podatkov nato z različnimi algoritmi in metodami izluščijo novo uporabno znanje. Ena od teh metod je tudi tema moje diplomske naloge: napovedovanje vrednosti z algoritmom k najbližjih sosedov. Namen diplomske naloge je raziskati področje napovedovanja vrednosti objektom glede na njihove lastnosti ter oceniti natančnost algoritma na podatkih iz resničnega sveta. V ta namen smo implementirali testni program, ki išče priporočilo cene za avtomobil, katerega lastnosti podamo preko grafičnega vmesnika. Napisan je v C# in deluje po algoritmu iskanja k najbližjih sosedov. Realne podatke dobi s spletne strani za dražbe ebay. Naloga je sestavljena iz sedmih poglavij. Prvo poglavje je pričujoč uvod. V drugem poglavju smo okvirno opisali znanost kolektivne inteligence in umestili

11 predmet našega raziskovanja v to področje. Sledi podroben opis algoritma k najbližjih sosedov (knn k nearest neighbors) in razlaga tehnik, s katerimi izboljšujemo rezultate. V tretjem poglavju predstavimo naš testni program in razložimo njegovo delovanje. Ob koncu predstavimo še nekaj idej za izboljšanje programa. Četrto poglavje opisuje testiranje ter interpretira rezultate testiranja, ki smo ga izvedli s testnim programom. Sledi zaključek v petem poglavju ter v šestem poglavju še literatura, s katero smo si pomagali ob pripravi naloge.

12 2 ALGORITEM K NAJBLIŽJIH SOSEDOV 2.1 Kaj je kolektivna inteligenca Kolektivna inteligenca je skupina algoritmov in metod, s katerimi iz velike količine podatkov izluščimo nov vpogled ali novo znanje o skupini ljudi, ki jim ti podatki pripadajo. V tehničnem smislu to pomeni, da združujemo lastnosti, želje in ideje skupine ljudi in tako izvemo nekaj o njihovih skupnih lastnostih, katerih se pripadniki skupine ne zavedajo. Seveda pa raba teh metod ni omejena le na ljudi. Podobnosti in skupne lastnosti lahko iščemo tudi med številnimi izdelki ali objekti. Pojem kolektivne inteligence je v rabi že več desetletij. Izvira iz področja statistične analize socialnih skupin. Metode so bile seveda v rabi že pred internetom. Podatke je mogoče zbirati z anketiranjem, jih združiti in iz njih izračunati statistične sklepe o skupini. Najosnovnejši primer takšne analize je postavljanje cenzusov. Z razvojem računalniške in komunikacijske tehnologije je uporaba kolektivne inteligence dobila nov zagon. Na internetu vsako sekundo veliko število ljudi nakupuje, raziskuje in komunicira. Ves ta promet je mogoče spremljati, ne da bi uporabnike nadlegovali z vprašanji. Tako lahko iz te ogromne zaloge podatkov izluščimo, kaj ljudi zanima in česa si želijo. Internet in sodobni računalniki omogočajo zbiranje podatkov na veliko širšem področju. Hkrati je analiza velike količine podatkov veliko hitrejša in natančnejša. Odličen primer, kako kolektivna inteligenca deluje, so finančni trgi. Cen na borzi ne določa ena oseba, ampak tisoči posameznikov s svojimi transakcijami. Iz tega sledi, da lahko razmere na trgu najbolje napove veliko število agentov, ki na trgu delajo tako, kot verjamejo, da je za njih najbolj ugodno. V takšnih primerih se je bolje zanesti na združene izkušnje, predvidevanja in znanje velikega števila

13 ljudi kot na individualno oceno posameznika, četudi je strokovnjak na obravnavanem področju [Segaran, 2007]. Danes postaja uporaba tehnik iz tega področja vse pogostejši način reševanja številnih problemov, katerih rešitev ni odvisna od posameznika ali relativno preprostega pravila, ampak od mnogih, včasih posrednih vplivov. Tehnologija je uporabna na mnogih področjih in se marsikje že uporablja. Kot smo omenili že v uvodu, te metode s pridom uporablja Google v svojem iskalniku. Spletne prodajalne uporabljajo takšen sistem za iskanje priporočil uporabnikom glede na njihove dosedanje nakupe. Radijske postaje na internetu glede na odziv poslušalcev pripravljajo nove oblike programov, za katere verjamejo, da bodo ugajale velikemu številu ljudi. Seveda pa ti algoritmi niso uporabni le na internetu. V enaki ali podobni obliki se uporabljajo tudi pri reševanju različnih problemov na drugih področjih. Uporabljajo se v biotehnologiji, oglaševanju, strojnem vidu, optimizaciji poslovnih procesov in še marsikje drugje. Bistvo kolektivne inteligence ni le v zbiranju in prikazovanju podatkov, ampak v njihovi analizi in pridobivanju ter uporabi novega znanja iz zbranih podatkov. 2.2 Problem napovedovanja vrednosti Z razširitvijo interneta so se pojavile tudi številne spletne dražbe. Internetne strani, kot je ebay, uporabnikom omogočajo objavo ponudbe za prodajo vseh vrst izdelkov. Takšen oglas doseže veliko število možnih kupcev, kar je odlično za prodajalca, saj je tako verjetnost, da bo izdelek prodal, sorazmerno večja. Težava nastane, ko mora prodajalec določiti ceno izdelka, ki ga prodaja. S to težavo se je srečal vsak, ki je kdaj kaj prodajal. Predvsem pri izdelkih, katerim se cena ne veča sorazmerno z eno najpomembnejšo lastnostjo, lahko določitev vrednosti vzame veliko časa. Potrebno je poiskati izdelke, ki so po lastnostih

14 podobni našemu in predvidevati, kako posamezne lastnosti vplivajo na končno vrednost. Na internetu lahko najdemo veliko podobnih izdelkov, primerjamo njihove lastnosti in iz njihovih cen izračunamo priporočilo za ceno našega izdelka. Zakaj ne bi v ta namen uporabili računalnika? Aplikacija avtomatskega cenilca bi lahko zamudno iskanje in računanje opravila namesto človeškega cenilca. Program bi iskanje in izračune opravil hitreje, ceneje in morda celo bolj zanesljivo. Algoritmi za napovedovanje vrednosti z gradnjo cenovnih modelov (price models) so idealni za izvedbo takšnega pripomočka. Cenovni model je način za opis vpliva različnih lastnosti predmeta na njegovo vrednost oziroma ceno. Poenostavljeno bi lahko rekli, da je cenovni model enačba, s katero izračunamo ceno predmeta. Spremenljivke v tej enačbi so lastnosti ocenjevanega predmeta. Cena izdelka na dražbi z veliko kupci in prodajalci navadno doseže optimalno vrednost, ki bo ugodna tako za prodajalca kot za kupca. Takšna cena torej izraža resnično vrednost izdelka. Ravno te cene pa v svojih izračunih uporablja algoritem. Osnovni algoritem za napovedovanje vrednosti je iskanje k najbližjih sosedov [Segaran, 2007]. 2.3 Aplikativna uporaba Algoritem k najbližjih sosedov je uporaben na področjih, kjer nas zanima vrednost izdelka, ki je odvisna od številnih lastnosti. Napoveduje lahko vrednost za skoraj vse vrste predmetov, veliko prednost pred drugimi algoritmi pa ima pri predmetih kjer je veliko številskih lastnosti. V to skupino spadajo avtomobili, prenosni in namizni računalniki, mobilni telefoni, digitalni fotoaparati in podobni izdelki. Glavni slabosti algoritma sta računska zahtevnost, saj je potrebno izračunati oddaljenost do vsakega soseda v zalogi, in občutljivost na napake v podatkih. Problem je tudi določitev ali izračun ugodnih uteži, kar pa je na srečo potrebno storiti le enkrat.

15 Morda največja prednost pred podobnimi algoritmi je zmožnost razširjanja podatkovne zaloge, ki ne zahteva dodatnih izračunov. Velika prednost je tudi, da lahko uporabniku z lahkoto prikažemo, kako algoritem pride do rezultata. 2.4 Koncept algoritma Algoritem knn poskuša pri napovedovanju vrednosti nekega predmeta posnemati obnašanje ljudi. Tako kot mi predvideva, da bo vrednost nekega predmeta približno takšna, kot je vrednost njemu podobnih predmetov. Zato poskuša najti po lastnostih čimbolj podoben predmet. Primerja lahko le številske lastnosti, tj. lastnosti, ki so podane s številsko vrednostjo. Neštevilske lastnosti moramo zato pred uporabo v algoritmu prilagoditi. Algoritem v zalogi zbranih podatkov poišče k takšnih predmetov, ki so po svojih lastnostih najbližje predmetu, katerega vrednost želimo določiti. Zaloga zbranih podatkov je zbirka lastnosti in cen predmetov. Slika 2.1 prikazuje psevdo-kod algoritma. Zbrane podatke smo poimenovali Zaloga, predmet za katerega želimo napovedati vrednost pa se imenuje Iskani. Algoritem sosede išče tako, da za vsak predmet v zalogi s primerjalno funkcijo izračuna podobnost s predmetom, kateremu želimo napovedati vrednost. V zapisu postopka se ta funkcija imenuje GetEvklidska. Algoritem nato predmete uredi po oceni podobnosti in za izračun uporabi prvih k predmetov. To so predmeti, ki so najbolj podobni iskanemu. Za vsakega od teh sosedov izračuna utež. Velikost uteži je odvisna od»razdalje«do obravnavanega soseda. Uteži uporabimo ob izračunu uteženega povprečja cen najbližjih sosedov. To povprečje je napoved vrednosti iskanega predmeta. Število sosedov k pove, koliko predmetov bomo uporabili pri izračunu vrednosti. V idealnem primeru, ko bi imeli popolne podatke, bi lahko uporabili k=1. Tako bi za priporočeno vrednost našega predmeta uporabili kar ceno

16 najbližjega soseda. Žal pa resnični podatki niso skoraj nikoli popolni. Pogosto vsebujejo neustrezne vrednosti, zato je pametno, da uporabimo več sosedov. Vsekakor pa ne smemo uporabiti prevelike soseščine, saj bi tako pri računanju uporabili tudi cene predmetov, ki niso podobni našemu. To bi pomenilo, da napovedana vrednost nikakor ne more biti natančna, razen, če se obravnavani izdelek po vrednosti slučajno nahaja ravno sredi zaloge. Funkcija Utežen_kNN (int k; tab Zaloga; tab[] Iskani) { tab Seznam = new tab; for(int i=0 to Zaloga.count) { Seznam[i] = Zaloga[i]; Seznam[i].Evk = GetEvklidska(Iskani,Zaloga[i]); } Seznam.SortirajPo(Evk); double Rez,Usum=0; for(int i=0 to k) { double u = GetUtež(Seznam[i].Evk); Usum = Usum + u; Rez = Rez + (u * Seznam[i].Cena); } Rez = Rez / Usum; Vrni Rez; } Slika 2.1: Psevdo-kod algoritma uteženega knn 2.5 Primerjalna funkcija Primerjalna funkcija je način merjenja podobnosti dveh predmetov. To je bistven del algoritma knn, nujen za doseganje dobrih končnih ocen vrednosti. Uporabimo jo med vsakim predmetom v zalogi podatkov in predmetom, za katerega iščemo napoved vrednosti. Za vsak predmet v zalogi nam vrne oceno podobnosti, kjer nič pomeni popolnoma enak izdelek. Ocene se nato večajo sorazmerno z različnostjo primerjanih izdelkov. Tako nam omogoča preprosto primerjavo sosedov in njihovo naknadno razvrščanje po podobnosti. Primerjalna funkcija izračuna oceno podobnosti trenutnega obravnavanega predmeta iz zaloge in predmeta, za katerega iščemo vrednost, tako da obravnava vsak par sovpadajočih lastnosti posebej. Končna ocena je skupek posameznih razlik.

17 Osnova za računanje je enačba za evklidsko razdaljo (euclidean distance) (enačba 2.1) [wikipedia]. n 2 2 2 2 1 q1) + ( p2 q2 ) + + ( pn qn ) = ( pi qi ) i= 1 ( p L (2.1) Pri tem sta p in q primerjana predmeta, p i in q i pa predstavljajo posamezne lastnosti predmetov. Rezultat je evklidska razdalja med dvema primerjanima predmetoma. Bolj sta si predmeta po lastnostih podobna, manjša je razdalja med njima. Če so vse lastnosti popolnoma enake, je razdalja nič. Opazimo, da takšna primerjalna funkcija ne upošteva razlik v razponu vrednosti posameznih lastnosti. Tej težavi se izognemo z uvedbo prilagajanja spremenljivk (scaling dimensions) [Segaran, 2007]. Prav tako v osnovni obliki funkcija upošteva vse lastnosti kot enakovredne. Na primerih se izkaže, da so nekatere lastnosti pomembnejše kot druge. Z uporabo uteži dosežemo, da imajo pomembnejše lastnosti večji vpliv na oceno. V sledečih podpoglavjih sta opisani obe rešitvi. 2.6 Prilagajanje spremenljivk Prilagajanje spremenljivk po redu velikosti izenači vpliv spremenljivk, pri katerih je številska razlika velika vrednost, s tistimi, kjer imajo razlike majhen številski razpon. Vzemimo za primer lastnosti avtomobila. Razlika v prevoženih kilometrih med dvema podobnima voziloma je lahko reda 1.000 ali 10.000, medtem ko je razlika pri številu vrat le 2 ali 3. Tako bi že samo nesorazmerje povzročilo, da bi vpliv razlike prevoženih kilometrov na končno oceno prekril vpliv vseh ostalih lastnosti.

18 Nesorazmerje odpravimo tako, da vrednosti vsake lastnosti pomnožimo s konstanto, določeno za tisto lastnost. Tako dobimo primerljive vrednosti pri vseh lastnostih. Razlike po prilagoditvi pri vseh lastnostih na oceno podobnosti vplivajo enakomerno. Konstanto za prilagajanje izračunamo po enačbi 2.2, katere osnova je enačba za standardizacijo (enačba 2.3) [wikipedia]. 1 p = l l (2.2) p max min Pri tem je l max najvišja, l min pa najnižja možna vrednost lastnosti. l l l l min = (2.3) max min Pri tem je l vrednost, ki jo standardiziramo, l max najvišja, l min pa najnižja možna vrednost lastnosti. Za izračun lahko uporabimo tudi katerega izmed podobnih postopkov. Bistveno pri prilagoditvi reda velikosti je, da uporabimo enak način za vse lastnosti. Po prilagoditvi namreč ne računamo več absolutne razlike, ampak razliko izračunamo kot delež največje možne razlike pri posamezni lastnosti. Vrnimo se k primeru avtomobila. Z opisanim postopkom dosežemo, da ima razlika reda 10.000 pri prevoženih kilometrih enak vpliv na oceno podobnosti kot razlika 2 ali 3 pri številu vrat. 2.7 Utežene spremenljivke Pomemben del napovedovanja vrednosti je določitev kriterija o tem, katere lastnosti bolj, katere manj in katere morda sploh ne vplivajo na končno ceno izdelka.

19 Vzemimo primer prenosnega računalnika. Priložena programska oprema verjetno zelo malo, če sploh, vpliva na ceno. Po drugi strani hitrost procesorja, količina pomnilnika ter velikost ekrana odločilno vplivajo na ceno. Možno je tudi predvidevati, da velikost ekrana bolj vpliva na ceno kot velikost trdega diska. Za lastnosti, ki ne vplivajo na ceno, nastavimo uteži blizu nič, za vplivne lastnosti pa so uteži večje sorazmerno s pomembnostjo. Ob implementaciji navadno združimo uteži in konstante za prilagajanje spremenljivk in tako odstranimo en korak v postopku iskanja najbližjih sosedov. V primeru, ko vemo, katere lastnosti so pomembne in kako vplivajo na ceno, ni težko določiti uteži. Seveda pa v večini primerov delamo s podatki o predmetih, pri katerih vpliv lastnosti na ceno ni tako očiten. V takšnih primerih lahko poskušamo z različnimi utežmi, dokler ne najdemo takšnih, ki zagotavljajo dobre rezultate. To je zamudno in nezanesljivo, zato za določitev uteži raje uporabimo optimizacijo (optimization). 2.8 Optimizacija uteži Optimizacija uteži je postopek, s katerim poskušamo poiskati najboljše možne vrednosti za prilagajanje in utežitev posameznih lastnosti. To so vrednosti, ki jih lahko določimo sami, če dobro poznamo lastnosti in njihov vpliv na vrednost. Narava podatkov, ki jih uporabljamo pri algoritmu knn, je ravno takšna, da te odvisnosti navadno niso očitne. To je razumljivo, saj v kolikor bi bila razmerja med lastnostmi očitna na prvi pogled, algoritma knn sploh ne bi potrebovali. Algoritem za optimizacijo se imenuje simulirano ohlajanje (simulated annealing) in se zgleduje po metodi postopnega ohlajanja (annealing), ki se uporablja pri obdelavi kovin. Pri tem postopku kovino segrejejo, nato pa počasi ohladijo. Ker atomi v kovini počasi prehajajo iz visoko energijskega v nizko energijsko stanje, imajo priložnost med seboj najti stabilno razporeditev [Kirkpatrick, 1983].

20 Algoritem začne z naključno določenimi utežmi. Slika 2.2 predstavlja psevdo-kod algoritma. Spremenljivka T predstavlja temperaturo, Ohladi pa določa, kako hitro se ta temperatura znižuje. Korak določa, za koliko se v eni iteraciji lahko poveča ali zmanjša vrednost uteži, Domena pa omejuje najvišjo in najnižjo dovoljeno vrednost uteži. Postopek iskanja optimalnih uteži se ponavlja, dokler temperatura ne doseže dovolj nizke vrednosti. V vsakem koraku spremenimo naključno izbrano utež in s cenovno funkcijo preizkusimo, ali je nova razporeditev uteži boljša ali ne. Praviloma nadaljujemo z boljšo razporeditvijo uteži. Vendar pa, da se izognemo pasti lokalnih minimumov, algoritem včasih nadaljuje tudi s slabšo razporeditvijo. Verjetnost nadaljevanja postopka s slabšo razporeditvijo uteži upada v odvisnosti od temperature. Bolj kot se temperatura približuje nič, manjša je verjetnost nadaljevanja s slabšo razporeditvijo. Funkcija SimOhlajanje(int T; double Ohladi, Korak, tab domena) { tab Uteži = GetNaključneUteži(); while(t > 0.01) { št_last = random(0..uteži.count); smer = random(-1,1) tab n_uteži = Uteži; n_uteži[št_last] += smer; if(n_uteži[št_last] > domena.max) { n_uteži[št_last] = domena.max;} else if (n_uteži[št_last] < domena.min) { n_uteži[št_last] = domena.min;} u_cena = CenovnaF(Uteži); nu_cena = CenovnaF(n_Uteži); double p = pow(math.e,(-nu_cena-u_cena)/t); if(nu_cena < u_cena OR random(0..1)<p) { Uteži = n_uteži;} } T=T*Ohladi; } Vrni Uteži; Slika 2.2: Psevdo-kod algoritma simuliranega ohlajanja

21 2.9 Izračun vrednosti Končno priporočeno vrednost izračunamo z uteženim povprečjem cen k najbližjih sosedov. Tukaj je kvaliteta končne ocene močno odvisna od števila sosedov. Če je število k previsoko, bomo uporabili preveliko soseščino kar pomeni, da bi v izračunu upoštevali tudi sosede, ki niso dovolj podobni predmetu, katerega vrednost želimo predvideti. Če je k prenizek, pa lahko morebiten šum v podatkih popolnoma uniči predvidevanje. Izračun lahko izboljšamo na podoben način, kot to storimo pri računanju ocene bližine sosedov. Spomnimo se, da smo tam z utežmi določili, katere lastnosti bolj in katere manj vplivajo na končno ceno in so tako posredno tudi bolj ali manj pomembne pri računanju podobnosti. Po enaki logiki lahko torej sklepamo, da morajo cene bolj oddaljenih sosedov manj vplivati na vrednost kot cene manj oddaljenih. Za izračun uteži sosedov lahko uporabimo različne funkcije. V nadaljevanju so na kratko predstavljene osnovne tri. Vsaka od teh funkcij ima svoje prednosti in slabosti. Izbira prave funkcije je odvisna od podatkov, ki jih preiskujemo.

22 Inverzna funkcija (inverse function) Preprosta funkcija, pri kateri utež izračunamo po enačbi 2.4: 1 u i = (2.4) r Pri tem je u i utež po inverzni funkciji, r pa ocena podobnosti. Včasih se zgodi, da med podatki najdemo predmet, ki se po lastnostih popolnoma ujema z našim - takrat je ocena podobnosti enaka nič. V takšnih primerih moramo pred računanjem uteži oceni prišteti neko malo vrednost, da ne pride do deljenja z nič. Funkcija je preprosta za implementacijo in deluje hitro. Dobro ujemajočim sosedom izračuna zelo velike uteži, z oddaljevanjem pa velikost uteži drastično upade. V nekaterih primerih je takšno obnašanje funkcije dobrodošlo, vedno pa je problematična občutljivost na šum. Graf inverzne funkcije je na sliki 2.3. Slika 2.3: Graf inverzne funkcije

23 Odštevalna funkcija (substraction function) Pri tej funkciji utež izračunamo po enačbi 2.5: u o = C r (2.5) Pri tem je u o utež po odštevalni funkciji, C konstanta ter r ocena podobnosti. Tudi ta funkcija je preprosta za implementacijo in deluje hitro. Če je razlika negativna je utež enaka nič. Je manj občutljiva na šum kot inverzna funkcija, a ima drugo slabost. Lahko se zgodi, da je že najbližji sosed toliko oddaljen, da bo izračunana utež enaka nič. V takšnem primeru je nemogoče napovedati vrednost. Graf odštevalne funkcije je na sliki 2.4 Slika 2.4: Graf odštevalne funkcije

24 Gaussova funkcija (Gaussian function) Gaussova funkcija je nekoliko bolj zapletena kot prejšnji dve, a odpravi njune slabosti. Utež izračunamo po enačbi 2.6: u g = e r 2σ 2 2 (2.6) Pri tem je u g utež po Gaussovi funkciji, r ocena podobnosti, e Eulerjevo število, σ pa določa strmino krivulje. Vrednosti uteži se razporedijo po Gaussovi krivulji [wikipedia]. Utež je ena, ko je ocena podobnosti nič. Z večanjem ocene velikost uteži pada, a nikoli ne doseže nič. Tako ni nevarnosti, da za kakšen predmet ne bi bilo mogoče napovedati vrednosti. Žal pa ima tudi ta funkcija svojo slabost, saj zaradi svoje kompleksnejše narave za izračun uteži potrebuje več časa. Graf Gaussove funkcije je na sliki 2.5 Slika 2.5: Graf Gaussove funkcije

25 3 PROGRAM ZA PRIPOROČANJE CENE 3.1 Namen testne implementacije Prvotni namen izdelave testnega programa je bil raziskati delovanje algoritma knn ter spremljajočih metod. Med raziskovanjem teorije o algoritmu iskanja najbližjih sosedov smo spoznali, da bi bilo dobro koncept preizkusiti tudi na resničnih podatkih. Odločili smo se izdelati program, ki bi priporočal ceno avtomobila glede na podane lastnosti. Primer avtomobila je dober za preizkus algoritma knn, saj najdemo pri avtomobilih veliko številskih lastnosti, ki vplivajo na ceno. Znana spletna stran z dražbami ebay ponuja razvijalcem programske opreme v uporabo vmesnik, preko katerega omogočajo dostop do njihovih podatkov. Tako je možno dobiti podatke iz realnega sveta, na katerih se lahko preizkusi algoritem. Zanimalo nas je, kako težko bi bilo implementirati algoritem in spremljajoče metode in kako dobra predvidevanja bi uspel doseči. Program je napisan v C#, podatki za delo pa so shranjeni v podatkovni bazi, ki vsebuje podatke, pridobljene preko vmesnika ebay.

26 3.2 Koncept delovanja Program z uporabnikom komunicira preko grafičnega uporabniškega vmesnika. Glavni del uporabniškega vmesnika je na sliki 3.1. V polju Podatki o avtomobilu omogoča vnos lastnosti avtomobila, za katerega iščemo priporočilo o vrednosti. Gumb Predlagaj ceno sproži algoritem za določitev cene, ki se po izračunu izpiše v polju Predlagana cena. Gumb ebay omogoča nalaganje podatkov s spleta. Podatke poišče na strani ebay, kot iskalni argument pa uporabi znamko in model avtomobila, ki ju je vpisal uporabnik. Slika 3.1: Glavni del uporabniškega vmesnika Ker je program namenjen predvsem testiranju algoritma, smo ga nadgradili še z dodatnimi funkcijami, ki omogočajo testiranje in zbiranje statističnih informacij o testih. S klikom na gumb Odpri testni del razširimo uporabniški vmesnik in prikažemo t.i. testni del, ki ga lahko vidimo na sliki 3.2. Omogoča nam pregled vmesnih vrednosti, ki so pripeljale do končne napovedi in dostop do funkcij za testiranje. Poleg nastavitev algoritma je v tem okencu mogoče sprožiti tudi optimizacijo uteži lastnosti in zmožnost ustvarjanja umetnih podatkov.

27 Slika 3.2: Testni del uporabniškega vmesnika Notranja zgradba programa, ki je simbolično prikazana na sliki 3.3, izkorišča ugodno lastnost algoritma knn. Ta omogoča preprosto dodajanje podatkov v zalogo brez dodatnih izračunov. Ob sprožitvi algoritma program najprej poskusi poiskati podatke za primerjavo v lastni podatkovni bazi. Samo v primeru, ko tam ne najde dovolj podatkov, jih išče na spletu. Tako prihranimo veliko časa, ukrep pa je delno tudi nujen, saj vmesnik ebay v osnovni različici dovoljuje le dnevno omejeno število zahtevkov. Slika 3.3: Prikaz koncepta delovanja testnega programa

28 3.3 Vmesnik ebay Zelo popularna spletna dražba ebay ponuja dostop do podatkov za razvijalce programske opreme. Za dostop se je potrebno registrirati in pridobiti aplikacijski ID, ki ga posredujemo poleg vsake zahteve po podatkih. Postopek je brezplačen in relativno preprost. Spletni vmesnik ebay lahko podatke vrača v različnih oblikah, v testnem programu se uporablja zapis XML (extensible markup language). Podatke dobimo tako, da spletni strani pošljemo zahtevek URL (uniform resource locator). Zahtevek je sestavljen iz osnovnega spletnega naslova, na katerem te zahteve čaka vmesnik ebay in dodatnih podatkov. Dodatni podatki, ki sestavljajo klic vmesnika, so: identifikacija strani, s katere želimo pridobiti podatke, ime klicane funkcije, argumenti klicane funkcije, identifikacijska številka naše aplikacije, ki smo jo pridobili z registracijo, oznaka verzije vmesnika in oznaka pričakovane oblike odgovora. Postopek pridobivanja podatkov poteka v dveh korakih. V prvem koraku kličemo funkcijo FindItemsAdvanced (slika 3.4). Ime funkcije vstavimo v zahtevek, kot argumente pa dodamo znamko in model iskanega avtomobila. Ker so rezultati iskanja razdeljeni po straneh, dodamo zahtevku tudi število zadetkov na stran in zaporedno številko strani, ki jo želimo dobiti kot odgovor [ebay].

29 http://open.api.ebay.com/shopping?callname=finditemsadvanced &siteid=77 &appid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx &QueryKeywords=renault clio &CategoryID=9800 &version=517 &responseencoding=xml &MaxEntries=100 &PageNumber=1 Slika 3.4: Primer zahtevka FindItemsAdvanced Na takšen zahtevek dobimo odgovor v obliki dokumenta XML, ki vsebuje seznam zadetkov iskanja (slika 3.5). Poleg vsakega zadetka je zapisan tudi ItemID, s pomočjo katerega v naslednjem koraku zahtevamo podrobnosti za vsak najden predmet. Slika 3.5: Izsek iz odgovora na FindItemsAdvanced Odgovor nato prevedemo in iz njega izluščimo vse omenjene številke ItemID ter jih spravimo v seznam. Tukaj se prvi korak zaključi. Sledi drugi korak, v katerem pridobimo podrobne podatke o avtomobilih na dražbi. Za vsak ItemID v seznamu znova ustvarimo zahtevek URL, ki pa tokrat kot argument vsebuje identifikacijsko številko predmeta (slika 3.6). V ta namen uporabimo funkcijo GetSingleItem [ebay]. http://open.api.ebay.com/shopping?callname=getsingleitem &siteid=77 &appid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx &version=517 &responseencoding=xml &ItemID=320413246891 &IncludeSelector=Description,ItemSpecifics Slika 3.6: Primer zahtevka GetSingleItem Odgovor na ta zahtevek je znova dokument XML, slika 3.7, ki pa tokrat vsebuje podrobnosti o zahtevanem avtomobilu. Potrebno je le še zbrati in urediti podatke ter jih shraniti za kasnejšo uporabo.

30 Slika 3.7: Izsek iz odgovora na GetSingleItem Vidimo, da so lastnosti zapisane v paketih, imenovanih NameValueList. Vsak tak paket vsebuje ime lastnosti in njeno vrednost. Takšna oblika zapisa podatkov nam ustreza, saj je kot naročena za uporabo vgrajene funkcije C# GetElementsByTagName("NameValueList"). S to funkcijo dobimo seznam vseh omenjenih paketov. Vse, kar še moramo storiti, je, da glede na ime lastnosti zapišemo vrednost na pravo mesto v podatkovno bazo. 3.4 Realni podatki Ko delamo s podatki, ki ne vsebujejo napak, z lahkoto dosežemo ugodne rezultate. V praksi pa so podatki vse prej kot popolni. Srečamo se z dvema poglavitnima problemoma: manjkajočimi in neustreznimi podatki. Težavo manjkajočih podatkov lahko odpravimo z nadomeščanjem ali pa predmete, pri katerih niso na voljo vsi podatki, enostavno odstranimo. Slednje smo pri naši implementaciji storili tudi mi. Večja težava so podatki, ki imajo neresnično ali nemogočo vrednost. Na žalost so takšni primeri precej pogosti, ker lastnosti avtomobilov na spletni strani vnašajo uporabniki sami. V nekaterih primerih je te vrednosti zelo težko zaznati in nam povzročajo mnogo preglavic, saj lahko močno popačijo rezultate. V ta namen

31 ob izračunu predvidevanja uporabimo več sosedov, da podatke, ki odstopajo, skrijemo v povprečje. Kljub temu pa lahko nek izjemno popačen podatek še vedno pokvari končni rezultat, sploh v primerih, ko je zaloga izdelkov omejena. Testni program primerja in išče vrednosti avtomobilov. V podatkovni bazi ima vsak avtomobil poleg identifikacijske številke ebay ter imena znamke in modela še devet lastnosti. Ena od teh lastnosti je cena, druga vsebuje podatek za filtriranje, ostale pa opisujejo avtomobil in jih uporabimo pri ugotavljanju podobnosti. Te lastnosti so: število prevoženih kilometrov, leto prve registracije, število vrat, moč motorja v kilovatih (kw), kovinska barva, avtomatski menjalnik, dizelski motor. Zadnje tri od naštetih lastnosti niso številske, ampak kategorične, zato jih moramo za uporabo z algoritmom knn pretvoriti. V našem primeru smo pritrdilno kategorizacijo pretvorili v vrednost ena, nikalno pa v vrednost nič. Podatke za vneseni avtomobil pridobimo iz podatkovne baze s stavkom SQL. Izberemo vse zapise, pri katerih se znamka in model ujemata s tistimi vnesenimi preko uporabniškega vmesnika. V stavku je tudi filter podatkov in ukaz za urejanje po ebayitemid. Z urejanjem zagotovimo, da so podatki razporejeni naključno, saj lastnosti avtomobila ne vplivajo na njegovo identifikacijsko številko ebay. To je pomembno predvsem pri preizkušanju algoritma, kjer bi lahko zaporedno zapisani podobni avtomobili popačili rezultate. Primer stavka SQL je na sliki 3.8. SELECT tacho,regyear,doors,metallic,power,automatic,diesel,price FROM cars WHERE cars.make like 'Renault%' AND cars.model like 'Clio%' AND cars.zscore < 2.0 ORDER BY ebayitemid; Slika 3.8: Primer stavka SQL

32 3.5 Filtriranje podatkov Zaradi številnih napak v realnih podatkih, pridobljenih s spleta, smo v testni program vgradili filter. Deluje na podlagi vrednosti z (standard score ali z-score), ki jih izračunamo za vsak avtomobil v zalogi podatkov. Vrednost z za vsak avtomobil izračunamo na podlagi njegove cene, povprečne cene ter standardnega odklona. Povprečno ceno in standardni odklon izračunamo iz podatkov o avtomobilih, ki se s trenutnim ujemajo po znamki, modelu in letniku izdelave. Področje tako omejimo zato, ker so cene avtomobilov istega letnika izdelave podobne, cene različnih letnikov pa se navadno razlikujejo. Če avtomobilov ne bi delili po letnikih, bi starejšim in novejšim od povprečne starosti dodelili nepravično visoke vrednosti z. Sam izračun vrednosti z je relativno preprost in se izvede po naslednji enačbi: µ z = x σ (3.1) Pri tem je x cena avtomobila, µ povprečna cena in σ standardni odklon. Izračunano vrednost z pripišemo vsakemu avtomobilu v podatkovni bazi. Predstavlja razdaljo med ceno in povprečno ceno, izraženo v enotah standardnega odklona [wikipedia]. V podatkovno bazo zapišemo absolutno vrednost zato, ker ni pomembno ali je cena pod ali nad povprečjem, zanima nas le oddaljenost. Ob nalaganju iz zaloge uporabimo prag nad to vrednostjo. Tako iz podatkov odstranimo avtomobile, katerih cena pretirano odstopa od povprečja cen za njihov letnik. Ti zapisi so pogosto ravno tiste napake v podatkih, ki kvarijo natančnost napovedi.

33 3.6 Primerjalna funkcija V testnem programu se primerjalna funkcija imenuje EvaluateProximity (slika 3.9). Edini parameter, ki ga sprejme, je rowindex. Ta označuje zaporedno številko vrstice v zalogi podatkov, kjer so zapisane lastnosti avtomobila, ki ga trenutno obravnavamo. Rezultat primerjalne funkcije je evklidska razdalja med trenutnim avtomobilom, ki smo ga vnesli na grafičnem vmesniku, in avtomobilom iz zaloge na zaporednem mestu rowindex. Funkcija lahko računa razdaljo upoštevajoč uteži ali ne. Lastnosti trenutnega avtomobila se nahajajo v CurrRecord. Lastnosti avtomobila, vnesene preko uporabniškega vmesnika, smo prenesli v enako obliko, kot so zapisane v zalogi podatkov iz podatkovne baze. Na takšen način si olajšamo delo, saj je dostop do sovpadajočih lastnosti rešen s preprosto zanko, ki se z indeksom sprehodi od prve do zadnje lastnosti. Če je uporaba uteži lastnosti vklopljena, vrednost lastnosti pomnožimo z ustrezno utežjo. Vrednosti uteži za posamezne lastnosti so spravljene v tabeli skal. Rezultati funkcije se začnejo z nič, kar pomeni popolno ujemanje. Na primerih smo ocenili, da ocene do približno deset pomenijo dobro ujemanje. Pri oceni med deset in dvajset se avtomobila ujemata v nekaj lastnostih, nekje do trideset pa je ujemanje še sprejemljivo. Pri ocenah od petdeset dalje so si avtomobili po lastnostih že dokaj tuji.

34 private double EvaluateProximity(int rowindex) { double d = 0.0; DataRow prim = DTmain.Rows[rowindex]; for (int i = 0; i <= 6; i++) { double val1 = Convert.ToInt64(numerify (prim.itemarray.getvalue(i).tostring())); double val2 = Convert.ToInt64(numerify (CurrRecord.ItemArray.GetValue(i).ToString())); } if (chkutelast.checked) { val1 *= skal[i]; val2 *= skal[i]; } d += Math.Pow((val1 - val2), 2); } return Math.Sqrt(d); Slika 3.9: Psevdo-kod algoritma primerjalne funkcije 3.7 Prilagajanje in utežitev spremenljivk Omenili smo že, da je spremenljivke pred uporabo dobro prilagoditi po velikosti in jih utežiti. S prilagajanjem dosežemo, da imajo vse enak vpliv na izračunano razdaljo, z utežitvijo pa določimo, katere lastnosti so bolj in katere manj vplivne. Obe konstanti združimo v eno vrednost, da lahko ob računanju z eno operacijo prilagodimo in utežimo razliko trenutne lastnosti. Ker je te uteži potrebno določiti le enkrat, je najbolje, da jih zapišemo v tabelo. Iz te tabele preberemo ustrezno konstanto ob vsakem računanju evklidske razdalje med dvema avtomobiloma. V testnem programu smo tabelo poimenovali skal. Vsebuje sedem konstant, po eno za vsako od lastnosti, po katerih primerjamo pare avtomobilov. Vsaka konstanta je zmnožek utežne vrednosti in vrednosti za prilagoditev reda velikosti. V preglednici 3.1 so zapisane vrednosti, ki smo jih po lastni presoji določili v testnem programu. V prvem stolpcu so vrednosti za prilagoditev lastnosti, v drugem stolpcu pa so uteži.

35 Preglednica 3.1: Vrednosti za prilagoditev in utežitev lastnosti prilagoditev utež ime lastnosti 0,00002 100 prevoženi km 0,033 100 letnik 0,33 20 število vrat 0,005 50 moč motorja 1 5 kovinska barva 1 5 avtomatski menjalnik 1 5 dizelski agregat Vrednost za prilagajanje smo izračunali po enačbi 2.2. Uteži smo izbrali po lastni presoji pomembnosti posameznih lastnosti. Po nekaj preizkusih z utežmi, določenimi po lastni presoji, nas je zanimalo, ali bi bilo mogoče dobljene rezultate še kaj izboljšati. Odločili smo se, da poskusimo natančnost izboljšati z uporabo optimizacije. 3.8 Optimizacija uteži Optimizacija je algoritem, s katerim poskušamo poiskati najboljše vrednosti za uteži. Optimizacija izbere uteži in preizkusi delovanje algoritma s temi utežmi. Večkrat kot ponovimo postopek, večja je verjetnost, da bodo uteži dobre. Kot cenovno funkcijo lahko uporabimo funkcijo CrossValidate, ki smo jo pripravili za preizkušanje natančnosti in je opisana v podpoglavju 4.1. Funkcija vrne višjo vrednost pri slabšem vhodu, kar je točno to, kar potrebujemo. Postopek optimizacije je dolgotrajen, vendar ga je potrebno izvesti le enkrat, oziroma zelo redko. Nove uteži je vredno določiti le v primeru, ko v podatkovno zalogo dodamo veliko količino novih podatkov. Po dolgotrajnem postopku je optimizacija predlagala nove vrednosti za uteži, ki jih prikazuje preglednica 3.2. Ne pozabimo, da sta v teh vrednostih združeni vrednosti za prilagajanje in utežitev.

36 Preglednica 3.2: Vrednosti uteži določene z optimizacijo utež ime lastnosti 0,001 prevoženi km 3,344 letnik 0,012 število vrat 0,125 moč motorja 3,081 kovinska barva 6,221 avtomatski menjalnik 6,196 dizelski agregat 3.9 Izračun napovedi vrednosti Kot sedaj že vemo, končno vrednost izračunamo iz cen k najbližjih sosedov (slika 3.10). Pripravljeno imamo tabelo, v kateri shranimo za vsak avtomobil iz zaloge njegovo ceno ter oceno podobnosti. Po tem, ko tabelo uredimo po ocenah, imamo na vrhu seznama najbližje sosede in njihove cene, ki jih bomo upoštevali v izračunu. Za vsakega od teh prvih k elementov pa moramo, v kolikor je ta opcija na uporabniškem vmesniku izbrana, izračunati utež. Za izračun uteži smo implementirali tri funkcije, ki smo jih že opisali v podpoglavju 2.9. Sam izračun je preprost. Vsako upoštevano ceno pomnožimo z njeno utežjo, rezultate seštejemo in jih na koncu delimo z vsoto uteži (enačba 3.2, podpoglavje 3.10). { tcena = Convert.ToDouble(tabela[1, x].tostring()); double tweigh = 1 ; switch ( combobox2.selectedindex ) { case 0: { tweigh = getweighinverse(sorttab[i]); } break; case 1: { tweigh = getweighsubstract(sorttab[i]); } break; case 2: { tweigh = getweighgauss(sorttab[i]); } break; } ocena += tcena * tweigh; del += tweigh; } ocena = Math.Round(oCena / del); Slika 3.10: Psevdo-kod algoritma uteženega povprečja sosedov

37 Vsaka od funkcij za računanje uteži sprejme en argument, in sicer evklidsko razdaljo. Iz te vrednosti vsaka funkcija na svoj način izračuna in vrne utež. V vsaki funkciji je vgrajen tudi mehanizem, ki preveri, ali je na grafičnem vmesniku uteževanje sosedov vklopljeno. Če je uteževanje sosedov izklopljeno, je rezultat funkcije vedno ena. V tem primeru je končni rezultat navadno povprečje cen upoštevanih sosedov. Najenostavnejša in najhitrejša funkcija za izračun uteži je inverzna funkcija getweighinverse (slika 3.11). private double getweighinverse(double ocena) { if (chkutesos.checked) { if (ocena == 0) { ocena = 0.00001; } return 1.0 / ocena; } else return 1; } Slika 3.11: Psevdo-kod algoritma inverzne funkcije Naslednja funkcija je odštevalna. Imenuje se getweightsubstract (slika 3.12). private double getweighsubstract(double ocena) { int Konstanta = 50; double temp; if (chkutesos.checked) { temp = Konstanta - ocena; if (temp < 0) { temp = 0; } return temp; } else return 1; } Slika 3.12: Psevdo-kod algoritma odštevalne funkcije

38 Zadnja izmed implementiranih funkcij se imenuje getweighgauss (slika 3.13) in uteži izračuna po Gaussovi krivulji. private double getweighgauss(double ocena) { double sigma = 10.0; sigma = Math.Pow(sigma, 2); sigma = sigma * 2; double temp; if (chkutesos.checked) { temp = Math.Pow(ocena, 2.0); temp = temp / sigma; return Math.Pow(Math.E, (temp*-1)); } else return 1; } Slika 3.13: Psevdo-kod algoritma Gaussove funkcije 3.10 Ocena napovedane vrednosti Kvaliteto napovedane vrednosti lahko ocenimo, če si pogledamo vrednosti, ki jih je algoritem uporabil pri izračunu. Nekaj teh podatkov se izpiše v t.i. informacijskem polju na uporabniškem vmesniku, a je pregledovanje teh podatkov dokaj zamudno. Tako smo prišli na idejo, da bi v program vgradili zmožnost samodejne ocene rezultata. Če se z miško ustavimo nad predlagano ceno, le ta spremeni barvo (slika 3.14). Modra in oranžna barva pomenita dobro oziroma zadovoljivo oceno. Z rdečo barvo pa označimo rezultat, pri izračunu katerega je najverjetneje šlo nekaj po zlu. Lahko, da nismo našli dovolj bližnjih sosedov, ali pa se je med podatke prikradla kakšna izjemna vrednost. Takšne vrednosti smo omenili v podpoglavju 3.4. Z obarvanjem hitro dobimo občutek, ali je izračunana vrednost dobra ali ne. V zadnjem, rdečem območju je slučajna natančna ocena vrednosti zgolj posledica srečnega spleta okoliščin.

39 Slika 3.14: Primer obarvanja napovedi vrednosti glede na kvaliteto ocene Algoritem ocenjuje rezultat glede na dva izračuna, uteženo povprečje (weighted mean) ocen podobnosti in standardni odklon (standard deviation) upoštevanih cen [Dodge, 2003]. Osnova ocene je uteženo povprečje evklidskih razdalj, ki ga računamo hkrati z računanjem napovedi po enačbi 3.2. S preizkušanjem smo ocenili, da takšno povprečje nižje od sedem pomeni, da smo našli dovolj dobrih sosedov za dobro oceno. Med sedem in devetnajst se nahajajo izračuni, ki so na meji med dobrim in slabim, nad devetnajst pa se na izračunane napovedi ne moremo zanesti. p k i= 1 = k i= 1 w x i w i i (3.2) Pri tem je p uteženo povprečje, w i trenutna utež, x i trenutna evklidska razdalja in k število razdalj, ki jih upoštevamo v izračunu. Razdelitvi na ta območja dodamo še izračunan standardni odklon, ki pove, koliko so posamezne vrednosti oddaljene od povprečja. Računanje standardnega odklona je v statistiki zelo pogost način ugotavljanja homogenosti populacije (enačba 3.3). V našem primeru ocena zdrsne za en nivo, v kolikor standardi odklon presega vrednost deset tisoč. n 1 2 σ = ( x i x) (3.3) n i= 0 Pri tem je σ standardno odstopanje, n število vrednosti, x i trenutna vrednost in x povprečna vrednost.

40 3.11 Predlogi za izboljšanje programa Cilj algoritma knn je doseganje čim natančnejših napovedi vrednosti. Pri iskanju možnih izboljšav smo se osredotočili predvsem na tisto, ki bi po našem mnenju izboljšala kvaliteto končnega rezultata predvidevane vrednosti. Kot vemo, je celoten koncept algoritma osnovan na iskanju podobnih sosedov. Vidimo, da ne glede na to, kako dobro deluje algoritem, napoved na koncu ne more biti natančna, če je količina podatkov v zalogi preveč omejena, ali če podatki vsebujejo veliko napak. Slednje poskušamo odpraviti s filtriranjem. Predvidevamo, da bo program računal boljše napovedi vrednosti, če mu zagotovimo več podatkov. Več podatkov se lahko zagotovi tako, da se programu doda zmožnost povezovanja in uvažanja podatkov še iz drugih virov. Kot drugo možnost za izboljšavo, katere namen ni izboljšanje rezultatov kot pri prejšnji, predlagamo razširitev programa za uporabo na različnih predmetih. To bi močno povečalo uporabnost programa in ga naredilo uporabnega veliko širšemu krogu ljudi. Če ne bi bili omejeni le na avtomobile, bi bilo nujno narediti nov uporabniški vmesnik in zagotoviti vsestranskost celotnega sistema.

41 4 PREIZKUS ALGORITMA S TESTNIM PROGRAMOM 4.1 Primer napovedi vrednosti Poglejmo celoten postopek napovedi vrednosti. Na grafičnem vmesniku vnesemo lastnosti avtomobila. V primeru smo vnesli Volkswagen Golf, letnik 2000, prevoženih 200.000 km, 75 kw, 3 vrata, bencinski agregat in ročni menjalnik. V poskusu smo nastavitve algoritma pustili na privzetih vrednostih. Ker podatkovna baza že vsebuje podatke, se hitro po kliku na gumb Predlagaj ceno na grafičnem vmesniku prikaže izračunana napoved vrednosti. Prvi korak napovedi vrednosti je sestava stavka SQL, s katerim pridobimo podatke iz podatkovne baze. Našli smo 327 ustreznih avtomobilov. Za vsakega od teh zapisov s primerjalno funkcijo izračunamo evklidsko razdaljo do vnesenega avtomobila. Primerjalna funkcija vsako od lastnosti pomnoži s pripravljeno utežjo in izračuna razdaljo oziroma oceno podobnosti. Evklidske razdalje zapišemo v preglednico. Ko so izračunane vse razdalje, preglednico uredimo. V izračunu vrednosti uporabimo prvih k avtomobilov. V preglednici 4.1 so zbrane vrednosti, ki so pripeljale do končne napovedi. Po privzetih nastavitvah uporabimo pet sosedov. Vsakemu iz peterice se izračuna utež po Gaussovi funkciji. Cene sosedov pomnožimo s pripadajočimi utežmi, jih seštejemo, ter delimo z vsoto uteži. Preglednica 4.1: Vmesne vrednosti izračuna napovedi cena evklidska razdalja utež utež * cena 1 6400 1,937069 0,981413 6281,04 2 7800 2,405671 0,971478 7577,52 3 6800 2,573475 0,967428 6578,51 4 6500 2,628945 0,966033 6279,21 5 7200 2,643511 0,965662 6952,76 vsota 4,852014 33669,04

42. Napoved za vnesen avtomobil je 33.669,04 / 4,852014 = 6.939,188551. Izračunano napoved zaokrožimo na 6.939 in izpišemo na grafični vmesnik Hkrati z napovedjo smo izračunali tudi njeno oceno. Uteženo povprečje evklidskih razdalj upoštevanih sosedov je bilo 2,436135, standardni odklon upoštevanih cen pa 1145,4278. Obe vrednosti pričata o dobrih pogojih izračuna, zato napoved ocenimo kot dobro. Če se z miško ustavimo nad izpisano napovedjo se ta obarva modro. 4.2 Način preizkušanja Za preizkus algoritma knn smo testni program razširili s funkcijo CrossValidate. Algoritem deluje na principu navzkrižnega potrjevanja [Segaran, 2007]. Zalogo podatkov razdelimo na dva dela - testni del (test set) in učni del (training set). Testni del obsega približno 4 % velikosti celotne zaloge, učni del pa ostalih 96 %. Preizkušamo tako, da poskušamo s preiskovanjem učnega dela napovedati ceno za vsak izdelek v testnem delu. Ob tem upoštevamo ceno izdelka v testnem delu kot pravilen odgovor. Za vsako napoved izračunamo napako kot razliko med ceno testnega izdelka in napovedano vrednostjo. Povprečje napak je merilo, kako natančen je algoritma. Za oceno natančnosti izvedemo deset takšnih testov. Vsakič izberemo drug testni del. Ocena je podana v odstotkih in prikazuje, za koliko odstotkov v povprečju algoritem zgreši pravilen rezultat. V prvem delu preizkusov smo poskušali ugotoviti, katere nastavitve algoritma dajejo najboljše rezultate. Tako smo videli, ali dodatne vgrajene metode, kot so prilagajanje in uteževanje, res prispevajo svoj delež h kvaliteti končnega rezultata. Da bi dobili med seboj primerljive rezultate ob različnih nastavitvah algoritma,

43 smo izbiro testnega dela določili vnaprej. Poizkuse smo izvajali tudi z različnimi stopnjami k in tako iskali optimalno število upoštevanih sosedov. Ugotovili smo, katere nastavitve algoritma se obnesejo najbolje. S temi nastavitvami smo opravili še zadnji preizkus, pri katerem smo izbiro testnega dela prepustili naključju. Ker se preizkusi izvajajo na podatkih, ki vsebujejo 1.000 avtomobilov, testni del obsega 4 %, kar je 40 zapisov. Posamezno navzkrižno potrjevanje opravi preizkus na desetih različnih naključno izbranih testnih delih. Ker za izračun končne ocene uporabimo povprečje desetih navzkrižnih preizkusov, je ta ocena rezultat 4.000 napovedi cen. V učnem delu je predmetov 96 % kar je v našem primeru 960. Ker za vsako napoved algoritem izračuna evklidsko razdaljo do vsakega predmeta, je število primerjav 3.840.000. Če ob tem upoštevamo še število lastnosti posameznih predmetov in uporabo funkcij za določitev uteži sosedov, vidimo, da je algoritem računsko resnično zahteven. Preizkušanje smo razdelili na dva dela. Najprej smo poizkuse izvedli na umetno ustvarjenih podatkih, da smo ocenili delovanje algoritma. Nato smo enake poizkuse izvedli še na realnih podatkih iz interneta. Ker so podatki vsebovali nekaj napačnih in neprimernih vrednosti, smo pričakovali slabše rezultate. Bistveno pri preizkusu na realnih podatkih je bilo oceniti zmožnost uporabe takšnega algoritma v praksi. 4.3 Priprava testnih podatkov Umetne podatke smo pripravili, da bi lahko preizkusili delovanje algoritma brez vpliva napak v podatkih. Ustvarili smo tisoč avtomobilov in jih vnesli v podatkovno bazo. Pripravili smo jih tako, da smo pri vsakem posameznem avtomobilu določili začetno ceno 10.200 in mu dodelili naključne lastnosti. Ceno vsakega ustvarjenega avtomobila smo nato prilagajali glede na dodeljene lastnosti.