SNA Hackathon 2019

Í febrúar-mars 2019 var haldin samkeppni til að raða samfélagsnetstraumnum SNA Hackathon 2019, þar sem liðið okkar náði fyrsta sæti. Í greininni mun ég tala um skipulag keppninnar, aðferðirnar sem við reyndum og catboost stillingar fyrir þjálfun á stórum gögnum.

SNA Hackathon 2019

SNA Hackathon

Þetta er í þriðja sinn sem hackathon undir þessu nafni er haldið. Það er skipulagt af samfélagsnetinu ok.ru, hver um sig, verkefnið og gögnin eru í beinum tengslum við þetta samfélagsnet.
SNA (social network analysis) í þessu tilfelli er réttara skilið ekki sem greining á félagslegu línuriti, heldur frekar sem greining á félagslegu neti.

  • Árið 2014 var verkefnið að spá fyrir um fjölda likes sem færsla myndi fá.
  • Árið 2016 - VVZ verkefnið (kannski þú ert kunnugur), nær greiningu á félagslegu línuritinu.
  • Árið 2019, röðun á straumi notandans út frá líkum á því að notandinn muni líka við færsluna.

Ég get ekki sagt um 2014, en árið 2016 og 2019, auk gagnagreiningarhæfileika, var einnig krafist kunnáttu í að vinna með stór gögn. Ég held að það hafi verið blanda vélanáms og stórra gagnavinnsluvandamála sem laðaði mig að þessum keppnum og reynsla mín á þessum sviðum hjálpaði mér að vinna.

mlbootcamp

Árið 2019 var keppnin skipulögð á pallinum https://mlbootcamp.ru.

Keppnin hófst á netinu 7. febrúar og samanstóð af 3 verkefnum. Hver sem er gæti skráð sig á síðuna, hlaðið niður grunnlína og hlaðið bílnum í nokkrar klukkustundir. Í lok netstigsins 15. mars var þeim 15 efstu af hverjum stökkviðburði boðið á Mail.ru skrifstofuna fyrir offline stigið, sem fór fram frá 30. mars til 1. apríl.

Verkefni

Upprunagögnin veita notendaauðkenni (userId) og póstauðkenni (objectId). Ef notandanum var sýnd staða, þá innihalda gögnin línu sem inniheldur userId, objectId, viðbrögð notenda við þessari færslu (viðbrögð) og safn af ýmsum eiginleikum eða tengla á myndir og texta.

notandanafn objectId eigendaauðkenni viðbrögð myndir
3555 22 5677 [líkaði, smellti] [hash1]
12842 55 32144 [líkaði ekki] [hash2, hass3]
13145 35 5677 [smellt, deildi] [hash2]

Prófunargagnasettið inniheldur svipaða uppbyggingu en endurgjöfarreitinn vantar. Verkefnið er að spá fyrir um tilvist „líkað“ viðbragðsins í endurgjöfarsviðinu.
Skilaskráin hefur eftirfarandi uppbyggingu:

notandanafn SortedList[objectId]
123 78,13,54,22
128 35,61,55
131 35,68,129,11

Mælingin er meðaltal ROC AUC fyrir notendur.

Nánari lýsingu á gögnunum er að finna á heimasíðu ráðsins. Þar er líka hægt að hlaða niður gögnum, þar á meðal prófum og myndum.

Svið á netinu

Á netstigi var verkefninu skipt í 3 hluta

  • Samvinnukerfi — inniheldur alla eiginleika nema myndir og texta;
  • Myndir — inniheldur aðeins upplýsingar um myndir;
  • Textar — inniheldur aðeins upplýsingar um texta.

Ótengdur stig

Á offline stigi innihéldu gögnin alla eiginleika á meðan textar og myndir voru dreifðar. Það voru 1,5 sinnum fleiri raðir í gagnasafninu, sem þegar voru margar.

Lausn vandans

Þar sem ég geri ferilskrá í vinnunni byrjaði ég ferðalag mitt í þessari keppni með „Myndir“ verkefninu. Gögnin sem voru veitt voru userId, objectId, ownerId (hópurinn sem færslan var birt í), tímastimplar til að búa til og birta færsluna og að sjálfsögðu myndin fyrir þessa færslu.
Eftir að hafa búið til nokkra eiginleika byggða á tímastimplum var næsta hugmynd að taka næstsíðasta lagið af taugafrumunni sem var fyrirfram þjálfað á myndnetinu og senda þessar innfellingar í aukningu.

SNA Hackathon 2019

Árangurinn var ekki glæsilegur. Innfellingar frá myndnettaugafrumunni eru óviðkomandi, hugsaði ég, ég þarf að búa til minn eigin sjálfkóðara.

SNA Hackathon 2019

Það tók mikinn tíma og árangurinn batnaði ekki.

Eiginleika kynslóð

Það tekur mikinn tíma að vinna með myndir svo ég ákvað að gera eitthvað einfaldara.
Eins og þú sérð strax eru nokkrir afdráttarlausir eiginleikar í gagnasafninu og til að trufla mig ekki of mikið tók ég bara catboost. Lausnin var frábær, án nokkurra stillinga komst ég strax á fyrstu línu stigalistans.

Það er töluvert mikið af gögnum og það er lagt upp í parketformi þannig að án þess að hugsa mig tvisvar um tók ég scala og fór að skrifa allt í neista.

Einfaldustu eiginleikarnir sem gáfu meiri vöxt en innfelling mynd:

  • hversu oft objectId, userId og ownerId komu fram í gögnunum (ætti að vera í samræmi við vinsældir);
  • hversu margar færslur userId hefur séð frá ownerId (ætti að vera í samræmi við áhuga notandans á hópnum);
  • hversu mörg einstök notendaauðkenni skoðuðu færslur frá ownerId (endurspeglar stærð áhorfenda hópsins).

Af tímastimplum var hægt að fá tíma dags sem notandinn horfði á strauminn (morgun/síðdegi/kvöld/kvöld). Með því að sameina þessa flokka geturðu haldið áfram að búa til eiginleika:

  • hversu oft userId skráði sig inn á kvöldin;
  • á hvaða tíma þessi færsla er oftast sýnd (objectId) og svo framvegis.

Allt þetta bætti tölurnar smám saman. En stærð þjálfunargagnasettsins er um 20M færslur, svo að bæta við eiginleikum hægði mjög á þjálfuninni.

Ég hef endurskoðað nálgun mína við notkun gagna. Þrátt fyrir að gögnin séu tímaháð, sá ég engar augljósar upplýsingar leka „í framtíðinni“, en engu að síður, fyrir tilviljun, skipti ég þeim niður svona:

SNA Hackathon 2019

Þjálfunarsettið sem okkur var veitt (febrúar og 2 vikur í mars) var skipt í 2 hluta.
Líkanið var þjálfað á gögnum frá síðustu N dögum. Samsöfnunin sem lýst er hér að ofan voru byggð á öllum gögnum, þar með talið prófinu. Á sama tíma hafa komið fram gögn sem hægt er að byggja ýmsar kóðun af markbreytunni á. Einfaldasta aðferðin er að endurnýta kóða sem er nú þegar að búa til nýja eiginleika og einfaldlega gefa honum gögn sem hann verður ekki þjálfaður á og miða á = 1.

Þannig fengum við svipaða eiginleika:

  • Hversu oft hefur userId séð færslu í hópnum ownerId;
  • Hversu oft userId líkaði við færsluna í group ownerId;
  • Hlutfall færslur sem userId líkaði við frá ownerId.

Það er, það kom í ljós meina markkóðun á hluta gagnasafnsins fyrir ýmsar samsetningar af afdráttarlausum eiginleikum. Í grundvallaratriðum byggir catboost einnig markkóðun og frá þessu sjónarhorni er enginn ávinningur, en til dæmis varð hægt að telja fjölda einstaka notenda sem líkaði við færslur í þessum hópi. Á sama tíma var aðalmarkmiðinu náð - gagnapakkanum mínum var minnkað nokkrum sinnum og það var hægt að halda áfram að búa til eiginleika.

Þó að catboost geti byggt upp kóðun eingöngu byggt á viðbrögðum sem líkað er við, hefur endurgjöf önnur viðbrögð: endurdeilt, mislíkað, mislíkað, smellt, hunsað, kóðun sem hægt er að gera handvirkt fyrir. Ég endurreiknaði alls kyns söfnun og útrýmdi eiginleikum sem skipta litlu máli til að blása ekki upp gagnasafnið.

Á þeim tíma var ég í fyrsta sæti með miklum mun. Það eina sem var ruglingslegt var að myndinnfellingar sýndu nánast enga vöxt. Hugmyndin kom til að gefa allt til að efla kattinn. Við þyrlum Kmeans myndir og fáum nýjan afdráttarlausan eiginleika imageCat.

Hér eru nokkrir flokkar eftir handvirka síun og sameiningu klasa sem fengnir eru frá KMeans.

SNA Hackathon 2019

Byggt á imageCat búum við til:

  • Nýir flokkalegir eiginleikar:
    • Hvaða imageCat var oftast skoðað af userId;
    • Hvaða imageCat sýnir oftast ownerId;
    • Hvaða imageCat líkaði oftast við af userId;
  • Ýmsir teljarar:
    • Hversu margir einstakir imageCat horfðu á userId;
    • Um það bil 15 svipaðir eiginleikar auk markkóðun eins og lýst er hér að ofan.

Textar

Úrslitin í myndakeppninni áttu vel við mig og ég ákvað að prófa mig áfram með texta. Ég hef ekki unnið mikið með texta áður og heimskulega drap ég daginn á tf-idf og svd. Svo sá ég grunnlínu með doc2vec, sem gerir nákvæmlega það sem ég þarf. Eftir að hafa breytt doc2vec breytunum lítillega fékk ég innfellingu texta.

Og svo endurnotaði ég einfaldlega kóðann fyrir myndirnar, þar sem ég skipti innfellingum myndanna út fyrir textainnfellingar. Þar af leiðandi náði ég 2. sæti í textakeppninni.

Samvinnukerfi

Það var ein keppni eftir sem ég hafði ekki enn „pottað“ með priki, og miðað við AUC á stigatöflunni ættu úrslit þessarar tilteknu keppni að hafa mest áhrif á offline stigið.
Ég tók alla eiginleika sem voru í upprunagögnunum, valdi flokka og reiknaði út sömu tölur og fyrir myndir, nema eiginleika byggða á myndunum sjálfum. Bara að setja þetta í catboost kom mér í 2. sætið.

Fyrstu skref catboost hagræðingar

Eitt fyrsta og tvö annað sæti gladdi mig, en það var skilningur á því að ég hefði ekki gert neitt sérstakt, sem þýðir að ég gæti átt von á stöðumissi.

Verkefni keppninnar er að raða færslum innan notandans og allan þennan tíma var ég að leysa flokkunarvandann, það er að fínstilla ranga mælikvarða.

Leyfðu mér að gefa þér einfalt dæmi:

notandanafn objectId spá jarðsannleikur
1 10 0.9 1
1 11 0.8 1
1 12 0.7 1
1 13 0.6 1
1 14 0.5 0
2 15 0.4 0
2 16 0.3 1

Við skulum gera smá endurröðun

notandanafn objectId spá jarðsannleikur
1 10 0.9 1
1 11 0.8 1
1 12 0.7 1
1 13 0.6 0
2 16 0.5 1
2 15 0.4 0
1 14 0.3 1

Við fáum eftirfarandi niðurstöður:

Model AUC Notandi1 AUC Notandi2 AUC meina AUC
Valkostur 1 0,8 1,0 0,0 0,5
Valkostur 2 0,7 0,75 1,0 0,875

Eins og þú sérð þýðir það ekki að bæta AUC mæligildið í heild sinni að bæta meðaltal AUC mæligildi notanda.

Catboost veit hvernig á að hagræða röðunarmælingum úr kassanum. Ég las um röðunarmælingar, árangurssögur þegar þú notar catboost og stilltu YetiRankPairwise á að æfa yfir nótt. Niðurstaðan var ekki glæsileg. Þegar ég ákvað að ég væri vanþjálfaður, breytti ég villuaðgerðinni í QueryRMSE, sem, miðað við catboost skjölin, sameinast hraðar. Að lokum náði ég sama árangri og þegar ég æfði fyrir flokkun, en samspil þessara tveggja módela gaf góða aukningu sem kom mér í fyrsta sæti í öllum þremur keppnunum.

5 mínútum fyrir lokun netstigs „Collaborative Systems“ keppninnar færði Sergey Shalnov mig í annað sætið. Við gengum lengra leiðina saman.

Undirbúningur fyrir offline stig

Okkur var tryggður sigur á netinu á netinu með RTX 2080 TI skjákorti, en aðalvinningurinn upp á 300 rúblur og að öllum líkindum jafnvel fyrsta sætið neyddi okkur til að vinna þessar 000 vikur.

Eins og það kom í ljós notaði Sergey líka catboost. Við skiptumst á hugmyndum og eiginleikum og ég lærði um skýrsla Önnu Veronicu Dorogush sem innihélt svör við mörgum spurningum mínum, og jafnvel þeim sem ég hafði ekki enn fengið á þeim tíma.

Að skoða skýrsluna leiddi mig til þeirrar hugmyndar að við þurfum að skila öllum breytum í sjálfgefið gildi og gera stillingarnar mjög vandlega og aðeins eftir að hafa lagað sett af eiginleikum. Nú tók ein þjálfun um 15 klukkustundir, en einni gerð tókst að ná betri hraða en sá sem fékkst í hópnum með röðun.

Eiginleika kynslóð

Í Samvinnukerfakeppninni er mikill fjöldi eiginleika metinn mikilvægur fyrir líkanið. Til dæmis, auditweights_spark_svd - mikilvægasta merkið, en það eru engar upplýsingar um hvað það þýðir. Ég hélt að það væri þess virði að telja hinar ýmsu einingar út frá mikilvægum eiginleikum. Til dæmis, meðaltal auditweights_spark_svd eftir notanda, eftir hópi, eftir hlut. Það sama má reikna út með því að nota gögn sem engin þjálfun er framkvæmd á og markmið = 1, það er meðaltal auditweights_spark_svd eftir notanda eftir hlutum sem honum líkaði. Mikilvæg merki að auki auditweights_spark_svd, það voru nokkrir. Hér eru nokkrar þeirra:

  • endurskoðunarþyngdCtrGender
  • auditweightsCtrHigh
  • userOwnerCounterCreateLikes

Til dæmis meðaltalið endurskoðunarþyngdCtrGender samkvæmt userId reyndist það vera mikilvægur eiginleiki, rétt eins og meðalgildið userOwnerCounterCreateLikes eftir userId+ownerId. Þetta ætti nú þegar að láta þig halda að þú þurfir að skilja merkingu reitanna.

Einnig voru mikilvægir eiginleikar endurskoðunarvigtarLikesCount и endurskoðunarvigtarShowsCount. Með því að deila hver af öðrum, fékkst enn mikilvægari eiginleiki.

Gagnaleki

Samkeppni og framleiðslulíkön eru mjög ólík verkefni. Þegar gögn eru útbúin er mjög erfitt að taka tillit til allra smáatriða og koma ekki á framfæri einhverjum óléttum upplýsingum um markbreytuna í prófinu. Ef við erum að búa til framleiðslulausn munum við reyna að forðast að nota gagnaleka við þjálfun líkansins. En ef við viljum vinna keppnina, þá eru gagnalekar bestu eiginleikarnir.

Eftir að hafa rannsakað gögnin geturðu séð það samkvæmt objectId gildunum endurskoðunarvigtarLikesCount и endurskoðunarvigtarShowsCount breyting, sem þýðir að hlutfall hámarksgilda þessara eiginleika mun endurspegla umbreytinguna miklu betur en hlutfallið á skjánum.

Fyrsti lekinn sem við fundum er endurskoðunarvigtarLikesCountMax/endurskoðunarvigtarSýnirCountMax.
En hvað ef við skoðum gögnin betur? Röðum eftir sýningardegi og fáum:

objectId notandanafn endurskoðunarvigtarShowsCount endurskoðunarvigtarLikesCount skotmark (er líkað við)
1 1 12 3 Örugglega ekki
1 2 15 3 kannski já
1 3 16 4

Það kom á óvart þegar ég fann fyrsta slíka dæmið og það kom í ljós að spá mín rættist ekki. En með hliðsjón af þeirri staðreynd að hámarksgildi þessara eiginleika innan hlutarins jókst, vorum við ekki latir og ákváðum að finna endurskoðunarvigtarShowsCountNext и endurskoðunarvigtarLíkarTalaNæst, það er gildin á næsta augnabliki í tíma. Með því að bæta við eiginleika
(auditweightsShowsCountNext-auditweightsShowsCount)/(auditweightsLikesCount-auditweightsLikesCountNext) við tókum snöggt stökk.
Svipaða leka væri hægt að nota með því að finna eftirfarandi gildi fyrir userOwnerCounterCreateLikes innan userId+ownerId og td. endurskoðunarþyngdCtrGender innan objectId+userGender. Við fundum 6 svipaða reiti með leka og dregnum eins miklar upplýsingar og hægt var úr þeim.

Á þeim tíma vorum við búin að kreista út eins miklar upplýsingar og hægt var úr samstarfsþáttum, en ekki farið aftur í mynda- og textakeppni. Ég fékk frábæra hugmynd að athuga: hversu mikið gefa eiginleikar sem eru beint byggðir á myndum eða texta í viðeigandi keppnum?

Það var enginn leki í mynda- og textakeppnum, en á þeim tíma hafði ég skilað sjálfgefnum catboost breytum, hreinsað upp kóðann og bætt við nokkrum eiginleikum. Samtals var:

ákvörðun bráðum
Hámark með myndum 0.6411
Hámarks engar myndir 0.6297
Úrslit í öðru sæti 0.6295

ákvörðun bráðum
Hámark með texta 0.666
Hámark án texta 0.660
Úrslit í öðru sæti 0.656

ákvörðun bráðum
Hámark í samvinnu 0.745
Úrslit í öðru sæti 0.723

Það kom í ljós að ólíklegt var að við gætum kreist mikið út úr texta og myndum og eftir að hafa prófað nokkrar af áhugaverðustu hugmyndunum hættum við að vinna með þær.

Frekari kynslóð eiginleika í samvinnukerfum gaf ekki aukningu og við byrjuðum að raða. Á netstigi gaf flokkunar- og röðunarhópurinn mér smá aukningu, eins og það kom í ljós vegna þess að ég vanþjálfaði flokkunina. Engin af villuaðgerðunum, þar á meðal YetiRanlPairwise, gaf nokkurn veginn þá niðurstöðu sem LogLoss gerði (0,745 á móti 0,725). Það var enn von fyrir QueryCrossEntropy, sem ekki var hægt að ræsa.

Ótengdur stig

Á offline stigi hélst gagnauppbyggingin sú sama, en það voru smávægilegar breytingar:

  • auðkenni userId, objectId, ownerId var endurslembiraðað;
  • nokkur skilti voru fjarlægð og nokkur endurnefnd;
  • gögnunum hefur fjölgað um það bil 1,5 sinnum.

Til viðbótar við upptalda erfiðleika var einn stór plús: teyminu var úthlutað stórum netþjóni með RTX 2080TI. Ég hef haft gaman af htop í langan tíma.
SNA Hackathon 2019

Það var aðeins ein hugmynd - að endurskapa einfaldlega það sem þegar er til. Eftir að hafa eytt nokkrum klukkustundum í að setja upp umhverfið á þjóninum, fórum við smám saman að sannreyna að niðurstöðurnar væru hægt að endurtaka. Helsta vandamálið sem við stöndum frammi fyrir er aukning gagnamagns. Við ákváðum að minnka álagið aðeins og stilla catboost færibreytuna ctr_complexity=1. Þetta lækkar hraðann aðeins, en líkanið mitt fór að virka, útkoman var góð - 0,733. Sergey, ólíkt mér, skipti gögnunum ekki í 2 hluta og þjálfaði öll gögnin, þó að þetta hafi gefið bestan árangur á netstigi, á offline stigi voru margir erfiðleikar. Ef við tökum alla eiginleikana sem við bjuggum til og reyndum að troða þeim í catboost, þá myndi ekkert virka á netinu. Sergey gerði tegundahagræðingu, til dæmis, breytti float64 gerðum í float32. Í þessari grein, Þú getur fundið upplýsingar um minni fínstillingu í pöndum. Fyrir vikið þjálfaði Sergey á CPU með því að nota öll gögnin og fékk um 0,735.

Þessi úrslit dugðu til sigurs en við földum okkar sanna hraða og gátum ekki verið viss um að önnur lið væru ekki að gera það sama.

Berjast til hins síðasta

Catboost stilling

Lausnin okkar var endurgerð að fullu, við bættum við eiginleikum textagagna og mynda, svo það eina sem var eftir var að stilla catboost færibreyturnar. Sergey þjálfaði á örgjörva með litlum fjölda endurtekninga og ég þjálfaði á þeim með ctr_complexity=1. Það var einn dagur eftir, og ef þú bættir bara við endurtekningum eða eykur ctr_complexity, þá gætirðu náð enn betri hraða og gengið allan daginn.

Á offline stigi gæti hraðinn verið mjög auðveldlega falinn með því einfaldlega að velja ekki bestu lausnina á síðunni. Við áttum von á róttækum breytingum á stigatöflunni á síðustu mínútunum áður en innsendingum var lokað og ákváðum að hætta ekki.

Af myndbandi Önnu lærði ég að til að bæta gæði líkansins er best að velja eftirfarandi færibreytur:

  • námshlutfall — Sjálfgefið gildi er reiknað út frá stærð gagnasafnsins. Til að auka námshraða þarf að fjölga endurtekningum.
  • l2_blaða_reg — Reglusetningarstuðull, sjálfgefið gildi 3, valið helst á milli 2 og 30. Lækkun á gildi leiðir til aukinnar offitu.
  • pokahitastig — bætir slembivali við þyngd hluta í úrtakinu. Sjálfgefið gildi er 1, þar sem lóðin eru dregin úr veldisdreifingu. Lækkun á verðmæti leiðir til aukinnar offitu.
  • random_styrkur — Hefur áhrif á val á skiptingum við tiltekna endurtekningu. Því hærra sem tilviljunarkenndur_styrkur er, því meiri líkur eru á að skipting með litlum vægi sé valin. Við hverja síðari endurtekningu minnkar tilviljun. Lækkun á verðmæti leiðir til aukinnar offitu.

Aðrar breytur hafa mun minni áhrif á lokaniðurstöðuna, svo ég reyndi ekki að velja þær. Ein endurtekning af þjálfun á GPU gagnasafninu mínu með ctr_complexity=1 tók 20 mínútur og valdar færibreytur á minnkaða gagnasafninu voru örlítið frábrugðnar þeim ákjósanlegu í heildargagnagrunninum. Að lokum gerði ég um 30 endurtekningar á 10% af gögnunum og síðan um 10 endurtekningar á öllum gögnunum. Það varð eitthvað á þessa leið:

  • námshlutfall Ég hækkaði um 40% frá sjálfgefnu;
  • l2_blaða_reg lét það sama;
  • pokahitastig и random_styrkur lækkað í 0,8.

Við getum ályktað að líkanið hafi verið vanþjálfað með sjálfgefnum breytum.

Ég var mjög hissa þegar ég sá niðurstöðuna á stigatöflunni:

Model 1 líkan 2 líkan 3 líkan sveit
Án stilla 0.7403 0.7404 0.7404 0.7407
Með stillingu 0.7406 0.7405 0.7406 0.7408

Ég komst að þeirri niðurstöðu fyrir sjálfan mig að ef ekki er þörf á skjótri beitingu líkansins, þá er betra að skipta um val á breytum fyrir samstæðu af nokkrum gerðum sem nota óbjartsýni færibreytur.

Sergey var að fínstilla stærð gagnasafnsins til að keyra það á GPU. Einfaldasti kosturinn er að skera hluta af gögnunum af, en það er hægt að gera á nokkra vegu:

  • fjarlægðu elstu gögnin smám saman (byrjun febrúar) þar til gagnasafnið fer að passa inn í minnið;
  • fjarlægja eiginleika sem eru minnst mikilvægir;
  • fjarlægja notandakenni sem aðeins er ein færsla fyrir;
  • skildu aðeins eftir notendaauðkennin sem eru í prófinu.

Og að lokum, búðu til ensemble úr öllum valkostum.

Síðasta sveitin

Seint að kvöldi síðasta dags höfðum við sett saman líkön okkar sem skilaði 0,742. Á einni nóttu setti ég líkanið mitt af stað með ctr_complexity=2 og í stað 30 mínútna æfði það í 5 klukkustundir. Aðeins klukkan 4 var það talið, og ég gerði síðasta ensemble, sem gaf 0,7433 á opinbera stigatöflunni.

Vegna mismunandi aðferða við að leysa vandamálið voru spár okkar ekki sterkar fylgnir, sem gaf góða aukningu á hópnum. Til að fá gott ensemble er betra að nota hráa líkanspá spá(prediction_type='RawFormulaVal') og setja scale_pos_weight=neg_count/pos_count.

SNA Hackathon 2019

Á heimasíðunni má sjá lokaniðurstöður á stigatöflunni.

Aðrar lausnir

Mörg teymi fylgdu kanónum meðmælakerfisalgríma. Ég, sem er ekki sérfræðingur á þessu sviði, get ekki metið þær, en ég man eftir 2 áhugaverðum lausnum.

  • Lausn Nikolay Anokhin. Nikolay, sem er starfsmaður Mail.ru, sótti ekki um verðlaun, svo markmið hans var ekki að ná hámarkshraða, heldur að fá auðveldlega stigstærða lausn.
  • Ákvörðun dómnefndar Verðlaunahóps byggð á þessa grein af facebook, leyfði mjög góða myndþyrping án handavinnu.

Ályktun

Það sem festist mest í minningunni:

  • Ef það eru flokkaðir eiginleikar í gögnunum og þú veist hvernig á að gera markkóðun rétt, þá er samt betra að prófa catboost.
  • Ef þú tekur þátt í keppni ættirðu ekki að eyða tíma í að velja aðrar breytur en learning_rate og endurtekningar. Hraðari lausn er að búa til ensemble af nokkrum gerðum.
  • Uppörvun getur lært á GPU. Catboost getur lært mjög fljótt á GPU, en það étur upp mikið minni.
  • Við þróun og prófun hugmynda er betra að stilla lítið rsm~=0.2 (aðeins CPU) og ctr_complexity=1.
  • Ólíkt öðrum liðum gaf samstæðu líkananna okkar mikla aukningu. Við skiptumst aðeins á hugmyndum og skrifuðum á mismunandi tungumálum. Við höfðum aðra nálgun við að skipta gögnunum og ég held að hver þeirra hafi sínar villur.
  • Ekki er ljóst hvers vegna hagræðing flokkunar gekk verr en flokkunarfínstilling.
  • Ég öðlaðist nokkra reynslu af því að vinna með texta og skilning á því hvernig meðmælakerfi eru gerð.

SNA Hackathon 2019

Þakkir til skipuleggjenda fyrir tilfinningarnar, þekkinguna og verðlaunin.

Heimild: www.habr.com

Bæta við athugasemd