Tento dokument popisuje použití modelu pro klasifikaci bugů v interní bugzille (produkt Profinit_ITS) do více než dvou kategorií na principu naivního Bayesova klasifikátoru. Model vytěžuje text bugu, bayesovskými příznaky jsou jednotlivá slova, kategorie odpovídají komponentám produktu.
Součástí každého bugu je slovní popis obsahu bugu. Kategorie bugů se mezi sebou liší tím, na jakou oblast jsou zaměřené, a tedy i použitým slovníkem. Výskyt určitých konkrétních slov může proto silně svědčit pro příslušnost k určité kategorii.
Předpokládejme, že máme celkem r kategorií bugů. Označíme je \(C_1, C_2, \ldots, C_r\). Tradiční naivní Bayesův klasifikátor pro klasifikaci v rámci těchto kategorií používá Bayesův vzorec:
\({P(C_i|X_1, X_2, ..., X_k)} = \frac{P(X_1|C_i) \cdot P(X_2|C_i) \cdot \ldots \cdot P(X_k|C_i) \cdot P(C_i)}{P(X_1, X_2, \ldots, X_k)}\)
za předpokladu, že jevy \(X_i\) jsou vzájemně podmíněně nezávislé v rámci každé kategorie \(C_i\).
Apriorní pravděpodobnost \(P(C_i)\) odhadujeme z dat jako relativní četnost bugů kategorie \(C_i\) ze všech bugů. Korekční poměry \(P(X_j|C_i)\) odhadujeme z dat (bugů z kategorie \(C_i\)) jako podíl relativních četností opravený o tzv. Laplaceovu korekci.
V našem případě jsou jevy \(X_i\) reprezentovány výskytem jednotlivých slov v textu bugu. Je zřejmé, že to nebudou nezávislé jevy. Naivní Bayesův klasifikátor sice v praxi funguje dobře i při porušení předpokladu nezávislosti, zde ale každý bug obsahuje jiný počet slov. Tento problém lze řešit tím, že ve výše uvedeném vzorci na pravé straně alternativně namísto prostého součinu korekčních poměrů \(P(X_j|C_i)\) použijeme geometrický průměr těchto korekčních koeficientů (apriorní pravděpodobnosti do průměru nezahrnujeme):
\({P(C_i|X_1, X_2, ..., X_k)} = \frac{\sqrt[k]{P(X_1|C_i) \cdot P(X_2|C_i) \cdot \ldots \cdot P(X_k|C_i)} \cdot P(C_i)}{P(X_1, X_2, \ldots, X_k)}\)
Data pocházejí z bugzilly, produkt Profinit_ITS.
U každého bugu využijeme jen zařazení do komponenty (pro nás komponenta=kategorie) a text popisu bugu.
bugs = fread(file = "../../zdroje/bugs_Profinit_ITS_full.csv")
# cisteni - vypusteni bugu s divnym id (neni ctyrmistne nebo petimistne cislo)
bugs = bugs[between(nchar(bug_id), 4, 5)]
# ponechani jen relevantnich poli
bugs = bugs[, .(bug_id, thetext, name)]
Data obsahují údaje (řádky) za celkem 16 319 bugů.
Následující tabulka uvádí vzorek bugů v datech. Texty bugů jsou ve výpisu ořezány na max. 200 znaků.
name | text |
---|---|
Pozadavky |
Prosím povolit. Díky moc, Mirek. Pro povolení synchronizace zařízení s emailem PROFINIT založ prosím bug v interní BugZille. Pamatuj přitom na to, že je povolené mít synchronizované jen jedno za |
Prava_Bugzilla_Interni |
Ahoj, prosím o práva do Interní Bugzilly na produkt DAG_TRADPO pro Ondřej Vojta Prosím DM Michala Podzimka o schválení. Díky. |
Pozadavky |
Ahoj, tiskárna na recepci nám hlásí "“vyměňte nádobku na odpadní toner”". Děkuji moc, Nikol |
Pozadavky | Prosím o zrušení samostatné schránky petr.stipek@profinit.eu a zajištění, aby pošta zaslaná na tuto adresu chodila do schránky petr.stipek@mantatools.com (Gmail). Obsah mailboxu petr.stipek@profinit.e |
Pozadavky | Dnes mi byl proveden reset hesla do VPN/Profisu. Ticket zadávám zpětně. |
Licence_SW |
Ahoj, Chtěl bych požádat o licenci na Total Commander pro sebe a Lucku Vytlačilovou (kontext ČSOBP). |
Nastup_vystup_lidi |
Obecne informace Nastup: 1.9.2016 Jmeno: Marián Prijmeni: Krlička |
Pozadavky |
Ahoj, prosím o reset hesla do domény. Díky, D |
Prava_SVN_Externi |
Ahoj, prosim o read pravo do https://svn-externi.profinit.eu/svn/Sazka/ESB/ Je to v ramci prirpavy pro O2 na projekt CRoads Lubor |
VM_Servers |
hostname: VM-SVAT-O2 IP: 193.85.191.169 DNS: N/A vCPU: 2 vRAM: 4 GB vHDD: 100 GB Os: CentOS 7 Net: DmzDevNet1 FW: outside -> tcp/80, tcp/8080 Pozadavek: bug 33352 |
Prava_SVN_Externi | Prosim o pristup do externi SVN, konkretne do https://svn-externi.profinit.eu/svn/GEMoney/LiferayPortal/ |
Pozadavky |
vyreseno s KBenesem. Poprosil jsme o vypnuti notifikace na confluence pro upravu termínu skoleni 2017. Díky Karle, H. |
Pozadavky |
Ahoj kluci, chtěla bych poprosit o zřízení přístupu na SVN Komerční banky pro mojí maličkost. Díky Magda |
Pozadavky | Prosím o pridelenie licencie na MS Project. Potrebujem k tvorbe projektových plánov pro KB. Ďakujem. |
Licence_SW |
Ahoj, potreboval bych licenci MS Project - potrebuji ho pro planovani prace v Cardif. Diky. Oleg |
Nastup_vystup_lidi |
Obecne informace Nástup:1.10.2012 Jmeno:Lucie Prijmeni:Pazderová Pozice: Externista EE Zeme: CZ Notebook od Profinitu: ne Zridit vsechny pristupy: Ne (!Pouzijte, pokud bude mit uzivatel n |
Pozadavky | Zapomněl své heslo do PC, prosím o reset. (Tento požadavek již vyřešil Najman Patrik (díky), zadávám jej zpětně) |
Prava_EMail | |
Pozadavky |
Ahoj, potreboval by som zriadiť prístup do externej svn (čítanie a zápis): Alex |
VM_Servers |
hostname: VM-PCCS-N2 IP: 172.16.200.49 vCPU: 2 vRAM: 6 GB vHDD: 55 GB Os: CentOS 6.4 64bit Net: devNet sda1 - 12 GB swap - 3 GB sdb1 - 40 GB Pristup ma Pavel v mailu. P. |
Prava_Bugzilla_Externi |
Ahoj, Prosím o zřízení přístupu do externí Bugzilly - produkt "“CSSZ - AAA vyvoj”" pro uživatele Pavel Šmejkal - pavel.smejkal@cssz.cz Michal Chlupáč - michal.chlupac@cssz.cz Hesla prosí |
Nastup_vystup_lidi |
Ahoj, Petr uz u nas na kontrole ntb byl, bude nutne aby dorazil jeste jednou kvuli nastaveni dalsich pristupu? diky L. Prechod z EE na EI |
Incidenty |
Porucha klavesnice na KVM. - Nereaguje na vstupni informace. - Pripojene servery: Gandalf, ACS, Marvin, Balicky-interni Srv. Balicky-interni vyadava varovni akusticky signal. |
Pozadavky | Ahoj, v rámci projektu upgrade Magic úzce spolupracujeme s pracovníky ČAH/LP (formálně spadají pod naše vedení) - chtěl bych se zeptat, zda je možnost jim nějak zpřístupnit vývojový server vm-lp-ma |
Pozadavky_na_HW | Ahoj, zadam o schvaleni nakupu 17ks ntb nastupy/vymeny, soucasne zasoby jsou skoro u konce. P. |
Pozadavky |
Ahoj kluci, mohl by nám to někdo přijít prosím vyměnit? Díky Ivet :) |
Prava_Bugzilla_Externi |
Ahoj, prosim o zalozeni kompotenty Ukoly do ext. BGZ v produktu Sberbank DWH: Nazev: Úkoly Popis: Operativní úkoly projektu a požadavky na součinnost Default Assignee: Vaclav Faltus Default C |
Pozadavky |
Ahoj, potřeboval bych udělat účty v externí bugzille pro lidi z KB: Michal Trnka - michal_trnka@kb.cz Lenka Milenovská - lenka_milenovska@kb.cz A nastavit jim přístup do projektu KB_ITDS_EXT |
Prava_SVN_Interni |
Ahoj, potřeboval bych přiřadit práva zápisu do struktury na interní SVN: https://svn-interni.profinit.lan/svn/ALD Důvodem je participace na supportu v ALD. Díky. Tom |
Licence_SW |
Ahoj, prosím o licenciu Enterprise Architect ve verzii Corporate, pre potreby projektu CutOver migrácie v TO2. Radku, prosím o schválenie. Dík, M. |
V datech je celkem 40 kategorií. Rozdělení kategorií podle četností uvádí následující graf.
Pro klasifikaci vybereme vždy jen určitou množinu kategorií, zbylé zahrneme do společné kategorie Ostatní:
Pozadavky |
Pozadavky_na_HW |
Nastup_vystup_lidi |
Prava_SVN_Externi |
Prava_EMail |
Incidenty |
Prava_Bugzilla_Externi |
Prava_File_System |
Licence_SW |
Prava_Confluence |
Profis |
Prava_GIT |
VM_Servers |
Prava_SVN_Interni |
Ostatni |
Texty popisu bugu jsou upraveny takto:
Protože kategorií je hodně, může se stát, že některé kategorie nepůjde podle pouhého slovníku od sebe rozlišit. Podíváme se, jak se k sobě jednotlivé kategorie shlukují, použijeme klasické hierarchické shlukování. Jako metriku vzdálenosti dvou kategorií použijeme zobecněnou Jaccardovu vzdálenost:
Mějme slova \(S_1, S_2, \ldots, S_n\). Spočteme jejich relativní četnosti v kategorii A \(p_1, p_2, \ldots,p_n\) a v kategorii B \(q_1, q_2, \ldots,q_n\). Potom zobecněná Jaccardova podobnost kategorií A a B je
\(JSim(A,B) = \frac{\sum_i{min(p_i, q_i)}}{\sum_i{max(p_i, q_i)}}\)
a zobecněná Jaccardova vzdálenost kategorií A a B je \(JDist(A,B) = 1-JSim(A,B)\).
Použijeme slova, která mají délku mezi 2 a 1000 znaků a která se aspoň v jedné kategorii vyskytují s relativní četností aspoň 0.002.
Ze shlukování je vidět, že nejpodobnější si jsou kategorie Pozadavky a Ostatni. Znamenalo by to, že v kategorii Pozadavky jsou často bugy, které se nedají zařadit do některé ze 14 specifikovaných kategorií. Dále je zřejmé, že ke zmíněným kategoriím jsou blízké Incidenty a Pozadavky_na_HW. U těchto kategorií tak můžeme očekávat největší překryv slovníků, a tedy nejhorší fungování klasifikace.
Zcela specifická je kategorie Nastup_vystup_lidi.
Projdeme krok za krokem proces učení modelu.
Použijeme tyto hodnoty parametrů:
Vypočteme vektor apriorních pravděpodobností a tabulku korekčních koeficientů.
kategorie | prpst_prior |
---|---|
Pozadavky | 0.360 |
Pozadavky_na_HW | 0.080 |
Nastup_vystup_lidi | 0.061 |
Prava_SVN_Externi | 0.052 |
Prava_EMail | 0.048 |
Incidenty | 0.044 |
Prava_Bugzilla_Externi | 0.041 |
Prava_File_System | 0.040 |
Licence_SW | 0.038 |
Prava_Confluence | 0.035 |
Profis | 0.033 |
Prava_GIT | 0.031 |
VM_Servers | 0.023 |
Prava_SVN_Interni | 0.020 |
Ostatni | 0.094 |
name | rel_01 | rel_02 | rel_03 | rel_04 | rel_05 | rel_06 |
---|---|---|---|---|---|---|
ahoj | 0.666 | 0.630 | 0.204 | 0.599 | 0.592 | 0.570 |
prosim | 0.627 | 0.462 | 0.259 | 0.798 | 0.731 | 0.601 |
diky | 0.475 | 0.421 | 0.071 | 0.458 | 0.481 | 0.425 |
na | 0.440 | 0.512 | 0.494 | 0.397 | 0.355 | 0.453 |
pro | 0.328 | 0.262 | 0.505 | 0.529 | 0.246 | 0.399 |
do | 0.314 | 0.177 | 0.297 | 0.647 | 0.332 | 0.405 |
dekuji | 0.250 | 0.232 | 0.167 | 0.216 | 0.211 | 0.198 |
se | 0.240 | 0.252 | 0.473 | 0.068 | 0.186 | 0.190 |
to | 0.210 | 0.178 | 0.011 | 0.080 | 0.172 | 0.191 |
je | 0.188 | 0.238 | 0.015 | 0.083 | 0.188 | 0.183 |
name | rel_01 | rel_02 | rel_03 | rel_04 | rel_05 | rel_06 |
---|---|---|---|---|---|---|
ahoj | 0.666 | 0.630 | 0.204 | 0.599 | 0.592 | 0.570 |
na | 0.440 | 0.512 | 0.494 | 0.397 | 0.355 | 0.453 |
prosim | 0.627 | 0.462 | 0.259 | 0.798 | 0.731 | 0.601 |
diky | 0.475 | 0.421 | 0.071 | 0.458 | 0.481 | 0.425 |
bych | 0.134 | 0.278 | 0.003 | 0.085 | 0.102 | 0.101 |
pro | 0.328 | 0.262 | 0.505 | 0.529 | 0.246 | 0.399 |
se | 0.240 | 0.252 | 0.473 | 0.068 | 0.186 | 0.190 |
je | 0.188 | 0.238 | 0.015 | 0.083 | 0.188 | 0.183 |
dekuji | 0.250 | 0.232 | 0.167 | 0.216 | 0.211 | 0.198 |
notebooku | 0.029 | 0.205 | 0.113 | 0.001 | 0.008 | 0.012 |
name | rel_01 | rel_02 | rel_03 | rel_04 | rel_05 | rel_06 |
---|---|---|---|---|---|---|
pristupy | 0.037 | 0.002 | 0.804 | 0.033 | 0.008 | 0.020 |
0.030 | 0.004 | 0.798 | 0.016 | 0.066 | 0.019 | |
profinit | 0.176 | 0.030 | 0.794 | 0.705 | 0.281 | 0.204 |
od | 0.050 | 0.066 | 0.792 | 0.024 | 0.025 | 0.051 |
bugzilla | 0.035 | 0.010 | 0.789 | 0.166 | 0.008 | 0.048 |
eu | 0.095 | 0.014 | 0.789 | 0.543 | 0.215 | 0.121 |
jmeno | 0.013 | 0.004 | 0.789 | 0.014 | 0.006 | 0.009 |
svn | 0.038 | 0.005 | 0.789 | 0.934 | 0.003 | 0.064 |
confluence | 0.043 | 0.002 | 0.788 | 0.018 | 0.013 | 0.087 |
cz | 0.053 | 0.047 | 0.788 | 0.172 | 0.021 | 0.081 |
Klasifikaci předvedeme na bugu s textem:
ahoj potrebuju nastavit tiskarny sedim v nultem patre u michala petrika diky pepa.
Budeme klasifikovat podle případu a), tj. pět kategorií + kategorie Ostatni.
name | rel_01 | rel_02 | rel_03 | rel_04 | rel_05 | rel_06 |
---|---|---|---|---|---|---|
ahoj | 0.666 | 0.630 | 0.204 | 0.599 | 0.592 | 0.570 |
diky | 0.475 | 0.421 | 0.071 | 0.458 | 0.481 | 0.425 |
michala | 0.020 | 0.013 | 0.028 | 0.024 | 0.005 | 0.030 |
nastavit | 0.025 | 0.005 | 0.001 | 0.016 | 0.019 | 0.020 |
patre | 0.011 | 0.015 | 0.001 | 0.001 | 0.001 | 0.003 |
pepa | 0.003 | 0.008 | 0.001 | 0.002 | 0.005 | 0.002 |
petrika | 0.002 | 0.001 | 0.001 | 0.001 | 0.001 | 0.004 |
potrebuju | 0.009 | 0.005 | 0.001 | 0.013 | 0.006 | 0.007 |
sedim | 0.002 | 0.009 | 0.001 | 0.001 | 0.001 | 0.001 |
tiskarny | 0.009 | 0.005 | 0.001 | 0.001 | 0.001 | 0.002 |
kategorie | prpst_posterior |
---|---|
Pozadavky | 3.985e-19 |
Pozadavky_na_HW | 3.584e-20 |
Nastup_vystup_lidi | 2.448e-26 |
Prava_SVN_Externi | 3.185e-22 |
Prava_EMail | 1.017e-22 |
Ostatni | 2.029e-20 |
Vyhodnocení klasifikačních schopností modelu provedu pomocí cross-validace:
Jako vhodné metriky přicházejí v úvahu:
Parametrizace modelu je stejná jako výše.
Použijeme pět nejpočetnějších kategorií a zbytek zahrneme do kategorie Ostatni – tato kategorie je tedy o něco větší než ta, kterou jsme se zabývali v kapitole Clusterování kategorií podle slovníku.
Při pouhých šesti kategoriích budeme pro klasifikaci sledovat jen jedinou (nejlepší nabídnutou) kategorii, nemá smysl sledovat nabídku tří nejvhodnějších.
kateg_skut | Pozadavky | Pozadavky_na_HW | Nastup_vystup_lidi | Prava_SVN_Externi | Prava_EMail | Ostatni |
---|---|---|---|---|---|---|
Pozadavky | 2617 | 872 | 145 | 217 | 536 | 1480 |
Pozadavky_na_HW | 47 | 1191 | 4 | 1 | 2 | 68 |
Nastup_vystup_lidi | 36 | 3 | 943 | 1 | 1 | 11 |
Prava_SVN_Externi | 7 | 0 | 0 | 797 | 0 | 41 |
Prava_EMail | 70 | 1 | 1 | 16 | 638 | 65 |
Ostatni | 799 | 387 | 32 | 681 | 227 | 4382 |
kateg_skut | Pozadavky | Pozadavky_na_HW | Nastup_vystup_lidi | Prava_SVN_Externi | Prava_EMail | Ostatni |
---|---|---|---|---|---|---|
Pozadavky | 44.6 | 14.9 | 2.5 | 3.7 | 9.1 | 25.2 |
Pozadavky_na_HW | 3.6 | 90.7 | 0.3 | 0.1 | 0.2 | 5.2 |
Nastup_vystup_lidi | 3.6 | 0.3 | 94.8 | 0.1 | 0.1 | 1.1 |
Prava_SVN_Externi | 0.8 | 0.0 | 0.0 | 94.3 | 0.0 | 4.9 |
Prava_EMail | 8.8 | 0.1 | 0.1 | 2.0 | 80.7 | 8.2 |
Ostatni | 12.3 | 5.9 | 0.5 | 10.5 | 3.5 | 67.3 |
Hodnota metriky accuracy je 0.648.
Z tabulek a grafů vyplývá, že bugy patřící do jiných kategorií než Pozadavky a Ostatni jsou klasifikovány s vysokou přesností (okolo 90 %). V kategoriích Pozadavky a Ostatni je přesnost klasifikace mnohem nižší. V kategorii Pozadavky je to vlastně příznivý výsledek, protože tato kategorie obsahuje mnoho bugů, které ve skutečnosti patří jinam, jen to autor bugu při založení z nějakého důvodu neudělal. Kategorie Ostatni pak zahrnuje velmi mnoho různých málo početných kategorií, z nichž některé jsou blízké početným kategoriím (Incidenty a Pozadavky_na_HW, Prava_SVN_Interni a Prava_SVN_Externi apod.).
Pokud se omezíme jen na jiné kategorie než Pozadavky a Ostatni, je upravená metrika accuracy rovna 0.905.
Podíváme se ještě, do jakých kategorií jsou klasifikovány bugy patřící do kategorií Pozadavky, resp. Ostatni.
kateg_skut | Pozadavky | Pozadavky_na_HW | Nastup_vystup_lidi | Prava_SVN_Externi | Prava_EMail | Incidenty | Prava_Bugzilla_Externi | Prava_File_System | Licence_SW | Prava_Confluence | Profis | Prava_GIT | VM_Servers | Prava_SVN_Interni | Ostatni |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Pozadavky | 1015 | 441 | 124 | 75 | 343 | 1567 | 628 | 314 | 80 | 87 | 344 | 226 | 292 | 194 | 137 |
Pozadavky_na_HW | 62 | 984 | 5 | 1 | 3 | 176 | 10 | 2 | 6 | 0 | 7 | 1 | 32 | 11 | 13 |
Nastup_vystup_lidi | 30 | 1 | 943 | 1 | 2 | 4 | 8 | 1 | 0 | 0 | 5 | 0 | 0 | 0 | 0 |
Prava_SVN_Externi | 6 | 0 | 0 | 702 | 0 | 26 | 69 | 0 | 0 | 1 | 5 | 5 | 0 | 30 | 1 |
Prava_EMail | 44 | 1 | 2 | 4 | 549 | 107 | 30 | 4 | 6 | 2 | 18 | 9 | 1 | 4 | 10 |
Incidenty | 18 | 26 | 1 | 2 | 7 | 617 | 8 | 5 | 1 | 1 | 9 | 1 | 7 | 5 | 7 |
Prava_Bugzilla_Externi | 7 | 0 | 0 | 33 | 0 | 23 | 598 | 0 | 0 | 0 | 6 | 0 | 0 | 2 | 1 |
Prava_File_System | 18 | 2 | 0 | 2 | 1 | 37 | 6 | 533 | 3 | 6 | 13 | 2 | 0 | 21 | 1 |
Licence_SW | 17 | 1 | 0 | 2 | 2 | 68 | 7 | 4 | 481 | 1 | 2 | 2 | 7 | 3 | 21 |
Prava_Confluence | 9 | 0 | 1 | 7 | 0 | 31 | 14 | 7 | 1 | 468 | 16 | 11 | 1 | 11 | 0 |
Profis | 5 | 0 | 2 | 1 | 0 | 68 | 11 | 10 | 2 | 0 | 439 | 0 | 1 | 0 | 1 |
Prava_GIT | 6 | 0 | 0 | 0 | 1 | 26 | 7 | 0 | 1 | 4 | 3 | 443 | 0 | 7 | 1 |
VM_Servers | 6 | 1 | 0 | 0 | 0 | 26 | 4 | 0 | 2 | 1 | 3 | 0 | 337 | 1 | 2 |
Prava_SVN_Interni | 3 | 0 | 0 | 14 | 0 | 15 | 8 | 3 | 1 | 1 | 1 | 1 | 0 | 271 | 1 |
Ostatni | 66 | 26 | 2 | 12 | 56 | 401 | 121 | 64 | 137 | 6 | 61 | 21 | 45 | 73 | 451 |
kateg_skut | Pozadavky | Pozadavky_na_HW | Nastup_vystup_lidi | Prava_SVN_Externi | Prava_EMail | Incidenty | Prava_Bugzilla_Externi | Prava_File_System | Licence_SW | Prava_Confluence | Profis | Prava_GIT | VM_Servers | Prava_SVN_Interni | Ostatni |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Pozadavky | 17.3 | 7.5 | 2.1 | 1.3 | 5.8 | 26.7 | 10.7 | 5.4 | 1.4 | 1.5 | 5.9 | 3.9 | 5.0 | 3.3 | 2.3 |
Pozadavky_na_HW | 4.7 | 74.9 | 0.4 | 0.1 | 0.2 | 13.4 | 0.8 | 0.2 | 0.5 | 0.0 | 0.5 | 0.1 | 2.4 | 0.8 | 1.0 |
Nastup_vystup_lidi | 3.0 | 0.1 | 94.8 | 0.1 | 0.2 | 0.4 | 0.8 | 0.1 | 0.0 | 0.0 | 0.5 | 0.0 | 0.0 | 0.0 | 0.0 |
Prava_SVN_Externi | 0.7 | 0.0 | 0.0 | 83.1 | 0.0 | 3.1 | 8.2 | 0.0 | 0.0 | 0.1 | 0.6 | 0.6 | 0.0 | 3.6 | 0.1 |
Prava_EMail | 5.6 | 0.1 | 0.3 | 0.5 | 69.4 | 13.5 | 3.8 | 0.5 | 0.8 | 0.3 | 2.3 | 1.1 | 0.1 | 0.5 | 1.3 |
Incidenty | 2.5 | 3.6 | 0.1 | 0.3 | 1.0 | 86.3 | 1.1 | 0.7 | 0.1 | 0.1 | 1.3 | 0.1 | 1.0 | 0.7 | 1.0 |
Prava_Bugzilla_Externi | 1.0 | 0.0 | 0.0 | 4.9 | 0.0 | 3.4 | 89.3 | 0.0 | 0.0 | 0.0 | 0.9 | 0.0 | 0.0 | 0.3 | 0.1 |
Prava_File_System | 2.8 | 0.3 | 0.0 | 0.3 | 0.2 | 5.7 | 0.9 | 82.6 | 0.5 | 0.9 | 2.0 | 0.3 | 0.0 | 3.3 | 0.2 |
Licence_SW | 2.8 | 0.2 | 0.0 | 0.3 | 0.3 | 11.0 | 1.1 | 0.6 | 77.8 | 0.2 | 0.3 | 0.3 | 1.1 | 0.5 | 3.4 |
Prava_Confluence | 1.6 | 0.0 | 0.2 | 1.2 | 0.0 | 5.4 | 2.4 | 1.2 | 0.2 | 81.1 | 2.8 | 1.9 | 0.2 | 1.9 | 0.0 |
Profis | 0.9 | 0.0 | 0.4 | 0.2 | 0.0 | 12.6 | 2.0 | 1.9 | 0.4 | 0.0 | 81.3 | 0.0 | 0.2 | 0.0 | 0.2 |
Prava_GIT | 1.2 | 0.0 | 0.0 | 0.0 | 0.2 | 5.2 | 1.4 | 0.0 | 0.2 | 0.8 | 0.6 | 88.8 | 0.0 | 1.4 | 0.2 |
VM_Servers | 1.6 | 0.3 | 0.0 | 0.0 | 0.0 | 6.8 | 1.0 | 0.0 | 0.5 | 0.3 | 0.8 | 0.0 | 88.0 | 0.3 | 0.5 |
Prava_SVN_Interni | 0.9 | 0.0 | 0.0 | 4.4 | 0.0 | 4.7 | 2.5 | 0.9 | 0.3 | 0.3 | 0.3 | 0.3 | 0.0 | 85.0 | 0.3 |
Ostatni | 4.3 | 1.7 | 0.1 | 0.8 | 3.6 | 26.0 | 7.8 | 4.2 | 8.9 | 0.4 | 4.0 | 1.4 | 2.9 | 4.7 | 29.2 |
Hodnota metriky accuracy je 0.541 a metriky accuracy v top3 je 0.789.
Při vysokém počtu kategorií se přesnost klasifikace z logického důvodu snížila. Stále však platí, že bugy patřící do většiny kategorií mimo Pozadavky a Ostatni jsou klasifikovány s přesností nad 60 %. V kategoriích Pozadavky, Ostatni a v kategoriích jim podobných z hlediska slovníku (viz kapitolu Clusterování kategorií podle slovníku) je přesnost klasifikace mnohem nižší.
Pokud se omezíme jen na jiné kategorie než Pozadavky a Ostatni, je upravená metrika accuracy rovna 0.827 a upravená metrika accuracy v top3 rovna 0.939.
Podíváme se opět, do jakých kategorií jsou klasifikovány bugy patřící do kategorií Pozadavky, resp. Ostatni.
Do samostatných souborů vyexportujeme případy z kategorií Pozadavky a Ostatni, abychom je mohli podrobně prozkoumat.
fwrite(bugs[target=="Pozadavky" & klasif!="Pozadavky", .(bug_id, name, target, klasif, thetext)],
file="klasifikovano-jinam-pozadavky.csv",
row.names=FALSE, col.names=TRUE)
fwrite(bugs[target=="Ostatni" & klasif!="Ostatni", .(bug_id, name, target, klasif, thetext)],
file="klasifikovano-jinam-ostatni.csv",
row.names=FALSE, col.names=TRUE)
Pojetí klasifikátoru popsané v předchozím textu a konkrétní hodnoty parametrů samozřejmě nejsou jediné možné. Má smysl uvažovat o různých modifikacích, např.:
Body 1 a 3 jsme zatím prozkoumali testováním alternativních scénářů. Ty zahrnují dvě různé metody text-miningu (metoda word dělí text na slova, metoda substr dělí text na n-gramy neboli podřetězce s pevnou délkou) a různé hodnoty parametrů. Každý scénář byl aplikován na stejná data s klasifikací do 15 kategorií a z cross-validace byly získány metriky accuracy v základní a upravené podobě. Následující tabulka uvádí scénáře seřazené podle metriky accuracy na kategoriích mimo Pozadavky a Ostatni.
metoda | base | cetnost_min | delka_min | delka_max | geom_prum | accuracy | accuracy_bez_Poz_Ost | accuracy_top3 | accur_top3_bez_Poz_Ost |
---|---|---|---|---|---|---|---|---|---|
word | 1.0 | 0.002 | 3 | 1000 | ne | 0.550 | 0.832 | 0.787 | 0.940 |
word | 1.0 | 0.002 | 2 | 1000 | ne | 0.542 | 0.827 | 0.792 | 0.939 |
word | 1.0 | 0.000 | 2 | 1000 | ne | 0.525 | 0.825 | 0.739 | 0.940 |
word | 0.5 | 0.002 | 2 | 1000 | ne | 0.564 | 0.825 | 0.857 | 0.935 |
word | 1.0 | 0.005 | 2 | 1000 | ne | 0.552 | 0.823 | 0.839 | 0.935 |
word | 1.0 | 0.002 | 1 | 1000 | ne | 0.542 | 0.821 | 0.795 | 0.937 |
word | 0.5 | 0.005 | 2 | 1000 | ne | 0.572 | 0.820 | 0.884 | 0.928 |
word | 1.0 | 0.002 | 4 | 1000 | ne | 0.545 | 0.818 | 0.774 | 0.932 |
word | 2.0 | 0.002 | 2 | 1000 | ne | 0.512 | 0.816 | 0.706 | 0.935 |
word | 1.0 | 0.010 | 2 | 1000 | ne | 0.557 | 0.813 | 0.863 | 0.925 |
word | 0.5 | 0.010 | 2 | 1000 | ne | 0.571 | 0.810 | 0.891 | 0.920 |
word | 1.0 | 0.020 | 2 | 1000 | ne | 0.563 | 0.801 | 0.874 | 0.917 |
word | 5.0 | 0.002 | 2 | 1000 | ne | 0.473 | 0.791 | 0.608 | 0.913 |
word | 1.0 | 0.050 | 2 | 1000 | ne | 0.558 | 0.776 | 0.869 | 0.899 |
word | 1.0 | 0.100 | 2 | 1000 | ne | 0.527 | 0.701 | 0.843 | 0.860 |
substr | 1.0 | 0.002 | 2 | 4 | ne | 0.454 | 0.522 | 0.771 | 0.740 |
substr | 1.0 | 0.002 | 2 | 4 | ne | 0.454 | 0.522 | 0.770 | 0.741 |
substr | 1.0 | 0.002 | 3 | 4 | ne | 0.464 | 0.477 | 0.772 | 0.709 |
substr | 1.0 | 0.002 | 2 | 3 | ne | 0.403 | 0.402 | 0.722 | 0.641 |
substr | 1.0 | 0.002 | 3 | 3 | ne | 0.428 | 0.349 | 0.713 | 0.567 |
substr | 1.0 | 0.002 | 4 | 4 | ne | 0.446 | 0.337 | 0.713 | 0.571 |
substr | 1.0 | 0.002 | 2 | 2 | ne | 0.380 | 0.231 | 0.655 | 0.480 |
substr | 1.0 | 0.002 | 3 | 3 | ano | 0.423 | 0.142 | 0.715 | 0.488 |
word | 0.5 | 0.002 | 2 | 1000 | ano | 0.434 | 0.130 | 0.880 | 0.781 |
word | 1.0 | 0.002 | 2 | 1000 | ano | 0.431 | 0.127 | 0.872 | 0.767 |
word | 0.5 | 0.005 | 2 | 1000 | ano | 0.430 | 0.124 | 0.869 | 0.761 |
substr | 1.0 | 0.002 | 4 | 4 | ano | 0.422 | 0.120 | 0.709 | 0.474 |
word | 0.5 | 0.010 | 2 | 1000 | ano | 0.426 | 0.120 | 0.855 | 0.735 |
substr | 1.0 | 0.002 | 3 | 4 | ano | 0.423 | 0.119 | 0.748 | 0.543 |
substr | 1.0 | 0.002 | 2 | 3 | ano | 0.407 | 0.092 | 0.710 | 0.474 |
substr | 1.0 | 0.002 | 2 | 2 | ano | 0.356 | 0.001 | 0.648 | 0.362 |