Iti0210lab11

Allikas: Lambda

Otsustuspuu: phishing linkide tuvastamine

Sissejuhatus

Kodutöö teemaks on e-mailides pahatahtlike (i.k. phishing) linkide ära tundmine. Selleks on kasutada andmed [1], kus e-mailidest on lingid juba eraldatud ja need omakorda huvipakkuvateks atribuutideks teisendatud. Kodutöös tuleb langetada atribuutide väärtuste pealt lõppotsus - kas link on pahatahtlik, kahtlane või ohutu.

Vali masinõppeks sobiv tarkvarapakett ning katseta otsustuspuud. Kasuta treenimise efektiivsuse mõõtmiseks krossvalideerimist. Proovi saavutada võimalikult suur täpsus, kasutades klassifikaatorina otsustuspuud.

Soovitatud masinõppe teegid (vali üks):

Ettevalmistus

Kõigepealt tuleb andmed sisse lugeda. Käsitsi ei ole seda keeruline teha, aga Anacondaga tuleb kaasa pandas pakett, millega see käib nii:

 import pandas
 blah = pandas.read_csv("IFI6057_hw2017_data.txt")

Tulemuseks on DataFrame tüüpi objekt

Andmete kirjeldus

Kõik atribuudid (ja lõplik klassifikatsioon) omavad järgnevaid väärtusi:

  • 1 - Legitiimne
  • 0 - kahtlane
  • -1 - Pahatahtlik või iseloomulik pahatahtlikule URL-ile

Atribuudid:

  • SFH kas veebilehel olevad vormid suunavad uuele domeenile
  • popUpWidnow kas veebilehel on pop-up aknaid
  • SSLfinal_State kas HTTPS on kasutuses ja kas sertifikaat on usaldusväärne
  • Request_URL kas veebileht laadib pilte ja muid komponente teiselt domeenilt
  • URL_of_Anchor kas veebileht sisaldab palju linke teisele domeenile
  • web_traffic kas veebilehe külastatavus on kõrge, keskmine või madal (Alexa ranking)
  • URL_Length ülipikk, pikk või tavaline URL
  • age_of_domain domeeni on vana või värskelt registreeritud
  • having_IP_Address URL sisaldab IP aadressi

Väli Result sisaldab lõplikku klassifikatsiooni treenimiseks ja testimiseks.

Näide:

 ...
 1,-1,1,0,-1,-1,0,1,0,-1
 1,-1,0,-1,-1,-1,0,1,0,1
 1,0,1,1,1,-1,1,1,0,-1
 1,1,1,-1,1,1,-1,-1,0,-1
 ...

Otsustuspuu

Treeni otsustuspuu esialgu kõigi andmetega: näited.

Proovi suvaliste treeningandmete ridadega klassifitseerimist. Tulemus peaks vastama treeningandmetele, muidu on midagi väga valesti :-)

Krossvalideerimine

Nüüd huvitab meid, kui hästi meie otsustuspuu töötab. Kasuta selleks krossvalideerimist ja leia keskmine täpsus ja hinnangu viga, nagu siin näidetes.

Märkus: näites on kasutatud klassifikaatorina tugivektormasinat (SVM). Meie ülesandes tuleb selle asemel võtta otsustuspuu.

Krossvalideerimise korral jäetakse osa andmeid puu treenimisest välja ning kasutatakse neid hoopis täpsuse testimiseks. Seejuures korratakse seda niiviisi, et kõiki sisendandmete ridu oleks lõpuks kasutatud nii treenimiseks kui testimiseks.

Tulemuse parandamine

See on kõige keerulisem ja võib olla ka mahukam osa ülesandest.

Loe läbi otsustuspuu kasutamise nõuanded. Proovi sealt midagi implementeerida ja vaata, kuidas see mõjutab krossvalideerimise tulemust.

Huvi võiks pakkuda:

  • dimensionaalsuse vähendamine, s.h. atribuutide valik või kombineerimine
  • puu parameetrite, eriti sügavuse muutmine
  • treeningandmete balanseerimine klasside järgi

Seda osa võib teha nii pikalt ja põhjalikult, kui huvi on. Mingi üritus tulemuse kvaliteeti parandada peaks siiski olema tehtud.

Artiklis [1] saavutati täpsus üle 94% (mitte otsustuspuudega).

Viited

1. Abdelhamid et al., Phishing Detection based Associative Classification Data Mining. Expert Systems With Applications (ESWA), 41 (2014) 5948-5959