September 17, 2018

Zadatak

  • Zadatak je da se oceni da li je neko pitanje sa http://stackoverflow.com loše ili ne.
  • Kao meru kvaliteta pitanja koristimo “score” pitanja, što predstavlja razliku u pozitivnim i negativnim glasovima koje su pitanju dodelili ćlanovi.
  • Pitanje smatramo lošim ako ima (strogo) negativan skor, a dobrim ako ima (strogo) pozitivan skor

Podaci

  • Podaci koji su korišćeni su sva pitanja na StackOverflow-u od 01.01.2016 do danas.
  • Preuzeti sa https://archive.org/details/stackexchange
  • Raspodela klasa pitanja (loše, nula, dobro), u brojevima (za 2016. god.):
    • Loše: 195,733
    • Nula: 1,072,209
    • Dobro: 955,376
    • (ukupno) 2,223,318

Raspodela podataka

Raspodela podataka po klasama: loše, nula, dobro:

Podaci

  • Dva problema:
    1. Nule čine skoro polovinu svih podataka
    2. Neizbalansiranost klasa \(\left(\frac{|loša\ pitanja|}{|dobra\ pitanja|}\approx 0.2\right)\)
  • Rešenja:
    1. Jer ne nose nikakvu informaciju o kvalitetu pitanja, a unose velik šum, izbacujemo nule iz podataka.
    2. Koristimo modele koji uzimaju u obzir neizbalansiranost klasa.

Model

  • Konačan model je u dva nivoa.
  • Prvi sloj: Dva modela koji, koristeći Word2Vec reprezentacije reči u tekstu, na osnovu teksta pitanja i naslova pitanja predviđaju verovatnoću da je pitanje loše. Algoritam korišćen nad vektorskim reprezentacijama tekstova (prosek reprezentacija reči) je BalancedBaggingClassifier iz imblearn paketa, zbog neizbalansiranosti klasa.
  • Drugi sloj: Logistička regresija sa atributima sačinjenim od predviđanja dobijenih iz prethodnog sloja, sa dodatkom prostijih atributa poput dužine pitanja, reputacije korisnika, kao i kosinusnog rastojanja reprezentacija naslova i tela pitanja.

Obučavanje

  • Prvi sloj - W2V model i klasifikatori obučavani na pitanjima iz 2016. god. i pitanjima iz prvog kvartala 2017. (2016. za obuč. + 1. q. 2017 za val.)
  • Drugi sloj - logistička regresija obučavana na preostala 3 (2 za obuč. + 1 za val.) kvartala 2017. godine.
  • Prva polovina 2018. ostavljena za testiranje
  • Rezultati konačnog modela:
    • AUC: 0.7453
    • za prag 0.275 (odabran u aplikaciji):
      • Precision: 0.46, Recall: 0.57, F1 score: 0.51
  • Fun fact - svo obučavanje rađeno na Google Compute Engine instanci sa 24 vCPU i 100GB ram memorije, zbog veličine podataka i modela.

Aplikacija

Slike aplikacije

Slike aplikacije