SNA Hackathon 2019

Niadtong Pebrero-Marso 2019, usa ka kompetisyon ang gihimo aron ma-ranggo ang feed sa social network SNA Hackathon 2019, diin nakuha sa among team ang unang pwesto. Sa artikulo maghisgot ako bahin sa organisasyon sa kompetisyon, ang mga pamaagi nga among gisulayan, ug ang mga setting sa catboost alang sa pagbansay sa dagkong datos.

SNA Hackathon 2019

SNA Hackathon

Kini ang ikatulo nga higayon nga adunay usa ka hackathon sa ilawom sa kini nga ngalan nga gihimo. Gi-organisar kini sa social network ok.ru, matag usa, ang buluhaton ug datos direktang may kalabutan sa kini nga social network.
Ang SNA (pag-analisa sa social network) sa kini nga kaso mas tukma nga nasabtan dili ingon usa ka pagtuki sa usa ka social graph, apan usa ka pagtuki sa usa ka social network.

  • Sa 2014, ang tahas mao ang pagtagna sa gidaghanon sa mga gusto nga makuha sa usa ka post.
  • Sa 2016 - ang buluhaton sa VVZ (tingali pamilyar ka), mas duol sa pagtuki sa social graph.
  • Sa 2019, ranggo ang feed sa user base sa posibilidad nga ganahan ang user sa post.

Dili nako masulti ang bahin sa 2014, apan sa 2016 ug 2019, dugang sa mga abilidad sa pag-analisar sa datos, gikinahanglan usab ang mga kahanas sa pagtrabaho sa dagkong datos. Sa akong hunahuna kini ang kombinasyon sa pagkat-on sa makina ug mga problema sa pagproseso sa dagkong datos nga nakadani kanako sa kini nga mga kompetisyon, ug ang akong kasinatian sa kini nga mga lugar nakatabang kanako nga makadaog.

mlbootcamp

Sa 2019, ang kompetisyon giorganisar sa plataporma https://mlbootcamp.ru.

Ang kompetisyon nagsugod online niadtong Pebrero 7 ug gilangkuban sa 3 ka buluhaton. Bisan kinsa mahimong magparehistro sa site, mag-download baseline ug ikarga ang imong sakyanan sulod sa pipila ka oras. Sa pagtapos sa online stage niadtong Marso 15, ang top 15 sa matag show jumping event giimbitar ngadto sa Mail.ru office alang sa offline stage, nga nahitabo gikan sa Marso 30 ngadto sa Abril 1.

Tumong

Ang tinubdan nga datos naghatag og user ID (userId) ug post IDs (objectId). Kung ang user gipakitaan ug post, nan ang data adunay usa ka linya nga adunay userId, objectId, reaksyon sa user niini nga post (feedback) ug usa ka set sa lain-laing feature o link sa mga hulagway ug mga text.

userId objectId ownerId feedback mga larawan
3555 22 5677 [gigusto, gi-klik] [hash1]
12842 55 32144 [dili ganahan] [hash2, hash3]
13145 35 5677 [gi-klik, gipaambit] [hash2]

Ang set sa datos sa pagsulay adunay parehas nga istruktura, apan ang natad sa feedback nawala. Ang tahas mao ang pagtagna sa presensya sa 'gusto' nga reaksyon sa natad sa feedback.
Ang pagsumite nga file adunay mosunod nga istruktura:

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

Ang metric mao ang kasagaran nga ROC AUC alang sa mga tiggamit.

Ang usa ka mas detalyado nga paghulagway sa datos makita sa website sa konseho. Mahimo usab nimo i-download ang datos didto, lakip ang mga pagsulay ug mga litrato.

Online nga yugto

Sa online nga yugto, ang buluhaton gibahin sa 3 ka bahin

  • Kolaborasyon nga sistema - naglakip sa tanan nga mga bahin gawas sa mga hulagway ug mga teksto;
  • Mga hulagway - naglakip lamang sa impormasyon mahitungod sa mga hulagway;
  • Mga teksto - naglakip lamang sa impormasyon mahitungod sa mga teksto.

Offline nga yugto

Sa offline nga yugto, ang datos naglakip sa tanan nga mga bahin, samtang ang mga teksto ug mga hulagway gamay ra. Adunay 1,5 ka beses nga dugang nga mga laray sa dataset, diin daghan na.

Ang solusyon sa problema

Tungod kay naghimo ako og CV sa trabaho, gisugdan nako ang akong panaw sa kini nga kompetisyon sa buluhaton nga "Mga Larawan". Ang datos nga gihatag mao ang userId, objectId, ownerId (ang grupo diin gimantala ang post), mga timestamp sa paghimo ug pagpakita sa post, ug, siyempre, ang hulagway alang niini nga post.
Pagkahuman sa paghimo og daghang mga bahin base sa mga timestamp, ang sunod nga ideya mao ang pagkuha sa penultimate layer sa neuron nga pre-trained sa imagenet ug ipadala kini nga mga embeddings sa pagpadako.

SNA Hackathon 2019

Ang mga resulta dili impresibo. Ang mga pag-embed gikan sa imagenet neuron wala’y kalabotan, naghunahuna ko, kinahanglan nako nga maghimo akong kaugalingon nga autoencoder.

SNA Hackathon 2019

Nagkinahanglan kini og daghang panahon ug ang resulta wala mouswag.

Feature nga henerasyon

Ang pagtrabaho gamit ang mga imahe nagkinahanglag daghang oras, mao nga nakahukom ko nga buhaton ang usa ka butang nga mas simple.
Sama sa imong makita dayon, adunay daghang mga kategorya nga bahin sa dataset, ug aron dili na mahasol pag-ayo, nagkuha lang ako og catboost. Maayo kaayo ang solusyon, nga wala’y bisan unsang mga setting nakaabut dayon ako sa una nga linya sa leaderboard.

Adunay daghang mga datos ug kini gibutang sa parquet format, mao nga sa walay paghunahuna sa makaduha, gikuha ko ang scala ug nagsugod sa pagsulat sa tanan sa spark.

Ang pinakayano nga mga bahin nga naghatag dugang nga pagtubo kaysa mga pag-embed sa imahe:

  • kapila makita ang objectId, userId ug ownerId sa datos (kinahanglan nga may kalabutan sa pagkapopular);
  • pila ka mga post ang nakita sa userId gikan sa ownerId (kinahanglan nga may kalabutan sa interes sa user sa grupo);
  • pila ka talagsaon nga userId ang nagtan-aw sa mga post gikan sa ownerId (nagpakita sa gidak-on sa mamiminaw sa grupo).

Gikan sa mga timestamp posible nga makuha ang oras sa adlaw diin ang user nagtan-aw sa feed (buntag/hapon/gabii/gabii). Pinaagi sa paghiusa niini nga mga kategorya, makapadayon ka sa paghimo og mga bahin:

  • pila ka beses nga nag-log in ang userId sa gabii;
  • sa unsang orasa kini nga post kanunay nga gipakita (objectId) ug uban pa.

Kining tanan anam-anam nga nagpauswag sa mga sukatan. Apan ang gidak-on sa set sa pagbansay mga 20M nga mga rekord, busa ang pagdugang sa mga bahin nagpahinay pag-ayo sa pagbansay.

Gihunahuna ko pag-usab ang akong pamaagi sa paggamit sa datos. Bisan kung ang datos nagsalig sa oras, wala akoy nakita nga klaro nga mga pagtulo sa kasayuran "sa umaabot", bisan pa, kung mahimo, gibuak nako kini sama niini:

SNA Hackathon 2019

Ang training set nga gihatag kanamo (Pebrero ug 2 ka semana sa Marso) gibahin sa 2 ka bahin.
Ang modelo gibansay sa datos gikan sa katapusang N nga mga adlaw. Ang mga aggregation nga gihulagway sa ibabaw gitukod sa tanan nga datos, lakip ang pagsulay. Sa parehas nga oras, nagpakita ang datos diin posible nga magtukod lainlaing mga pag-encode sa target nga variable. Ang pinakasimple nga pamaagi mao ang paggamit pag-usab sa code nga nagmugna na og bag-ong mga feature, ug pakan-a lang kini og mga datos diin dili kini mabansay ug target = 1.

Sa ingon, nakakuha kami parehas nga mga bahin:

  • Pila ka beses nga nakakita ang userId og post sa tag-iya sa grupo;
  • Pila ka beses gi-like ni userId ang post sa group ownerId;
  • Ang porsyento sa mga post nga gigusto sa userId gikan sa ownerId.

Sa ato pa, nahimo kini gipasabot nga target encoding sa bahin sa dataset alang sa lain-laing mga kombinasyon sa categorical features. Sa prinsipyo, ang catboost nagtukod usab sa target nga pag-encode ug gikan niini nga punto sa panglantaw wala'y kaayohan, apan, pananglitan, nahimong posible nga maihap ang gidaghanon sa mga talagsaon nga tiggamit nga ganahan sa mga post niini nga grupo. Sa samang higayon, ang nag-unang tumong nakab-ot - ang akong mga dataset gipakunhod sa makadaghang higayon, ug posible nga magpadayon sa pagmugna og mga bahin.

Samtang ang catboost makahimo sa pag-encode base lamang sa gusto nga reaksyon, ang feedback adunay ubang mga reaksyon: gibahin pag-usab, wala gusto, dili gusto, gi-klik, wala panumbalinga, mga pag-encode nga mahimo sa mano-mano. Gikalkulo nako pag-usab ang tanang matang sa mga aggregate ug giwagtang ang mga feature nga ubos ang importansya aron dili mapadako ang dataset.

Nianang panahona naa ko sa una sa usa ka halapad nga margin. Ang bugtong butang nga nakalibog mao nga ang mga pag-embed sa imahe nagpakita nga halos wala’y pagtubo. Miabot ang ideya nga ihatag ang tanan sa catboost. Among gihugpong ang Kmeans nga mga hulagway ug nagkuha ug bag-ong categorical feature imageCat.

Ania ang pipila ka mga klase human sa manwal nga pagsala ug paghiusa sa mga cluster nga nakuha gikan sa KMeans.

SNA Hackathon 2019

Base sa imageCat nga among gimugna:

  • Bag-ong mga bahin sa kategorya:
    • Unsa nga imageCat ang kasagarang gitan-aw sa userId;
    • Unsa nga imageCat ang kasagarang nagpakita sa ownerId;
    • Unsang imageCat ang kasagarang ganahan sa userId;
  • Nagkalainlain nga mga counter:
    • Pila ka talagsaon nga imageCat ang mitan-aw sa userId;
    • Mga 15 ka susama nga mga feature plus target encoding sama sa gihulagway sa ibabaw.

Mga teksto

Ang mga resulta sa kompetisyon sa imahe nahiangay kanako ug nakahukom ko nga sulayan ang akong kamot sa mga teksto. Wala pa kaayo ko nagtrabaho sa mga text kaniadto ug, binuang, gipatay nako ang adlaw sa tf-idf ug svd. Unya nakita nako ang baseline nga adunay doc2vec, nga mao gyud ang akong kinahanglan. Sa gamay nga pag-adjust sa mga parameter sa doc2vec, nakuha nako ang mga embeddings sa teksto.

Ug dayon akong gigamit pag-usab ang code alang sa mga imahe, diin akong gipulihan ang mga embeddings sa imahe sa mga embeddings sa teksto. Tungod niini, nakuha nako ang 2nd place sa kompetisyon sa text.

Kolaborasyon nga sistema

Adunay usa ka kompetisyon nga nahabilin nga wala pa nako "gisuntok" gamit ang usa ka sungkod, ug kung gihukman sa AUC sa leaderboard, ang mga resulta niining partikular nga kompetisyon kinahanglan nga adunay labing dako nga epekto sa offline nga yugto.
Gikuha nako ang tanan nga mga bahin nga naa sa gigikanan nga datos, gipili nga mga kategorya ug gikalkula ang parehas nga mga aggregate sama sa mga imahe, gawas sa mga bahin nga gibase sa mga imahe mismo. Ang pagbutang lang niini sa catboost nakuha nako sa 2nd place.

Unang mga lakang sa catboost optimization

Usa ka una ug duha ka ikaduha nga mga dapit nakapahimuot kanako, apan adunay usa ka pagsabut nga ako wala makahimo sa bisan unsa nga espesyal nga, nga nagpasabot nga ako makapaabut sa pagkawala sa mga posisyon.

Ang tahas sa kompetisyon mao ang pagranggo sa mga post sa sulod sa user, ug sa tanan niining panahona akong gisulbad ang problema sa klasipikasyon, nga mao, ang pag-optimize sa sayup nga sukatan.

Hatagan ko ikaw ug usa ka yano nga pananglitan:

userId objectId panagna kamatuoran sa yuta
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

Maghimo kita og gamay nga pag-usab

userId objectId panagna kamatuoran sa yuta
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

Atong makuha ang mosunod nga mga resulta:

Ang modelo AUC User1 AUC User2 AUC nagpasabot AUC
Pagpili 1 0,8 1,0 0,0 0,5
Pagpili 2 0,7 0,75 1,0 0,875

Sama sa imong nakita, ang pagpauswag sa kinatibuk-ang sukatan sa AUC wala magpasabut nga gipaayo ang kasagaran nga sukatan sa AUC sa sulod sa usa ka tiggamit.

Catboost nahibal-an kung unsaon pag-optimize ang mga sukatan sa ranggo gikan sa kahon. Nagbasa ko bahin sa mga sukatan sa ranggo, mga istorya sa kalampusan kung gamiton ang catboost ug itakda ang YetiRankPairwise aron magbansay sa tibuok gabii. Dili impresibo ang resulta. Sa pagdesisyon nga ako undertrained, akong giusab ang error function sa QueryRMSE, nga, sa paghukom sa catboost dokumentasyon, converges mas paspas. Sa katapusan, nakuha nako ang parehas nga mga resulta sama sa kung ang pagbansay alang sa klasipikasyon, apan ang mga ensemble niining duha nga mga modelo naghatag usa ka maayo nga pagtaas, nga nagdala kanako sa una nga lugar sa tanan nga tulo nga mga kompetisyon.

5 ka minuto sa wala pa ang pagsira sa online nga yugto sa kompetisyon nga "Collaborative Systems", gibalhin ako ni Sergey Shalnov sa ikaduhang dapit. Nagdungan mig lakaw sa laing dalan.

Pag-andam alang sa offline nga yugto

Gigarantiyahan kami nga kadaugan sa online nga entablado nga adunay RTX 2080 TI video card, apan ang panguna nga premyo nga 300 nga mga rubles ug, lagmit, bisan ang katapusan nga una nga lugar nagpugos kanamo nga magtrabaho alang niining 000 ka semana.

Ingon sa nahimo, gigamit usab ni Sergey ang catboost. Nagbinayloay kami og mga ideya ug mga bahin, ug nahibal-an nako report ni Anna Veronica Dorogush nga naglangkob og mga tubag sa daghan sa akong mga pangutana, ug bisan niadtong wala pa nako mabatoni nianang panahona.

Ang pagtan-aw sa taho nagdala kanako sa ideya nga kinahanglan namon nga ibalik ang tanan nga mga parameter sa default nga kantidad, ug buhaton ang mga setting pag-ayo ug pagkahuman sa pag-ayo sa usa ka hugpong sa mga bahin. Karon ang usa ka pagbansay mikabat ug mga 15 ka oras, apan ang usa ka modelo nakahimo sa pag-angkon og usa ka tulin nga mas maayo kay sa nakuha sa ensemble nga adunay ranggo.

Feature nga henerasyon

Sa kompetisyon sa Collaborative Systems, daghang mga bahin ang gisusi nga hinungdanon alang sa modelo. Pananglitan, auditweights_spark_svd - ang labing hinungdanon nga timaan, apan wala’y kasayuran kung unsa ang gipasabut niini. Naghunahuna ko nga mapuslanon ang pag-ihap sa lainlaing mga aggregate base sa hinungdanon nga mga bahin. Pananglitan, kasagaran nga auditweights_spark_svd sa user, sa grupo, sa butang. Ang parehas mahimong kalkulado gamit ang datos diin walay pagbansay nga gihimo ug target = 1, nga mao, average auditweights_spark_svd pinaagi sa tiggamit pinaagi sa mga butang nga iyang gusto. Dugang nga hinungdanon nga mga timailhan auditweights_spark_svd, dihay pipila. Ania ang pipila niini:

  • auditweightsCtrGender
  • auditweightsCtrHigh
  • userOwnerCounterCreateLikes

Pananglitan, ang kasagaran auditweightsCtrGender sumala sa userId kini nahimo nga usa ka importante nga bahin, sama sa kasagaran nga bili userOwnerCounterCreateLikes pinaagi sa userId+ownerId. Kini kinahanglan nga maghimo kanimo nga maghunahuna nga kinahanglan nimo nga masabtan ang kahulugan sa mga uma.

Usab importante nga mga bahin mao ang auditweightsLikesCount ΠΈ auditweightsShowsCount. Sa pagbahinbahin sa usag usa, usa ka mas hinungdanon nga bahin ang nakuha.

Mga pagtulo sa datos

Ang kompetisyon ug ang pagmodelo sa produksiyon lahi kaayo nga mga buluhaton. Kung nag-andam sa datos, lisud kaayo nga tagdon ang tanan nga mga detalye ug dili ipahayag ang pipila nga dili hinungdanon nga kasayuran bahin sa target nga variable sa pagsulay. Kung naghimo kami usa ka solusyon sa produksiyon, sulayan namon nga likayan ang paggamit sa mga pagtulo sa datos kung gibansay ang modelo. Apan kung gusto namon nga modaog sa kompetisyon, nan ang mga pagtulo sa datos mao ang labing kaayo nga bahin.

Kung natun-an ang datos, makita nimo kana sumala sa mga kantidad sa objectId auditweightsLikesCount ΠΈ auditweightsShowsCount pagbag-o, nga nagpasabut nga ang ratio sa labing kadaghan nga kantidad sa kini nga mga bahin magpakita sa pagkakabig sa post nga labi ka maayo kaysa sa ratio sa oras sa pagpakita.

Ang una nga pagtulo nga among nakit-an mao ang auditweightsLikesCountMax/auditweightsShowsCountMax.
Apan komosta kon atong tan-awon pag-ayo ang datos? Atong paghan-ay sumala sa petsa sa pagpakita ug pagkuha:

objectId userId auditweightsShowsCount auditweightsLikesCount target (gigusto)
1 1 12 3 murag dili
1 2 15 3 basin oo
1 3 16 4

Nakurat sa dihang nakit-an nako ang una nga pananglitan ug nahimo nga ang akong panagna wala matuman. Apan, nga gikonsiderar ang kamatuoran nga ang labing kataas nga mga kantidad sa kini nga mga kinaiya sa sulod sa butang nakadugang, wala kami tapolan ug nakahukom sa pagpangita auditweightsShowsCountNext ΠΈ auditweightsLikesCountNext, nga mao, ang mga mithi sa sunod nga gutlo sa panahon. Pinaagi sa pagdugang usa ka bahin
(auditweightsShowsCountNext-auditweightsShowsCount)/(auditweightsLikesCount-auditweightsLikesCountNext) mihimo kami ug hait nga paglukso.
Ang parehas nga mga pagtulo mahimong magamit pinaagi sa pagpangita sa mga mosunud nga kantidad alang sa userOwnerCounterCreateLikes sulod sa userId+ownerId ug, pananglitan, auditweightsCtrGender sulod sa objectId+userGender. Nakit-an namo ang 6 ka susama nga mga natad nga adunay mga pagtulo ug gikuha ang daghang impormasyon kutob sa mahimo gikan kanila.

Nianang panahona, nakuha na namo ang daghang impormasyon kutob sa mahimo gikan sa mga feature nga nagtinabangay, apan wala mibalik sa mga kompetisyon sa imahe ug teksto. Naa koy maayong ideya nga susihon: pila ang gihatag nga direkta nga mga bahin base sa mga imahe o teksto sa mga may kalabotan nga kompetisyon?

Wala’y mga pagtulo sa mga kompetisyon sa imahe ug teksto, apan nianang panahona gibalik nako ang default nga mga parameter sa catboost, gilimpyohan ang code ug gidugang ang pipila nga mga bahin. Ang resulta mao ang:

desisyon sa dili madugay
Maximum nga adunay mga hulagway 0.6411
Maximum nga walay mga hulagway 0.6297
Resulta sa ikaduhang dapit 0.6295

desisyon sa dili madugay
Maximum nga adunay mga teksto 0.666
Maximum nga walay mga text 0.660
Resulta sa ikaduhang dapit 0.656

desisyon sa dili madugay
Maximum sa kolaborasyon 0.745
Resulta sa ikaduhang dapit 0.723

Nahimong tataw nga dili gyud kami makapugong sa daghang mga teksto ug mga imahe, ug pagkahuman sa pagsulay sa usa ka magtiayon nga labing makapaikag nga mga ideya, mihunong kami sa pagtrabaho kauban nila.

Ang dugang nga henerasyon sa mga bahin sa mga sistema sa pagtinabangay wala maghatag pagtaas, ug nagsugod kami sa ranggo. Sa online nga entablado, ang klasipikasyon ug ranggo nga ensemble naghatag kanako og gamay nga pagtaas, ingon nga kini nahimo tungod kay ako nag-undertrain sa klasipikasyon. Walay bisan usa sa mga error function, lakip ang YetiRanlPairwise, nga gihimo bisan asa duol sa resulta nga LogLoss gibuhat (0,745 vs. 0,725). Adunay paglaum pa alang sa QueryCrossEntropy, nga dili malunsad.

Offline nga yugto

Sa offline nga yugto, ang istruktura sa datos nagpabilin nga pareho, apan adunay gagmay nga mga pagbag-o:

  • ang mga identifier userId, objectId, ownerId gi-rerandomize;
  • ubay-ubay nga mga timailhan ang gikuha ug ubay-ubay ang giilisan og ngalan;
  • ang datos misaka sa gibana-bana nga 1,5 ka beses.

Gawas pa sa nalista nga mga kalisud, adunay usa ka dako nga dugang: ang team gigahin usa ka dako nga server nga adunay RTX 2080TI. Dugay na ko nalingaw sa htop.
SNA Hackathon 2019

Adunay usa ra ka ideya - ang pagkopya sa kung unsa ang naglungtad na. Pagkahuman sa paggugol ug pipila ka oras nga pag-set up sa palibot sa server, anam-anam namong gisugdan ang pagmatuod nga ang mga resulta mabag-o. Ang panguna nga problema nga among giatubang mao ang pagtaas sa gidaghanon sa datos. Nakahukom mi nga pakunhuran og gamay ang load ug i-set ang catboost parameter ctr_complexity=1. Gipaubos niini og gamay ang katulin, apan ang akong modelo nagsugod sa pagtrabaho, maayo ang resulta - 0,733. Si Sergey, dili sama kanako, wala magbahin sa datos ngadto sa 2 ka bahin ug nagbansay sa tanang datos, bisan tuod kini naghatag sa pinakamaayo nga mga resulta sa online nga yugto, sa offline nga yugto adunay daghang mga kalisdanan. Kung gikuha namon ang tanan nga mga bahin nga among namugna ug gisulayan nga iduso kini sa catboost, nan wala’y mahimo sa online nga yugto. Gibuhat ni Sergey ang pag-optimize sa tipo, pananglitan, pag-convert sa float64 ngadto sa float32 type. Sa niini nga artikulo, Mahimo nimong makit-an ang kasayuran bahin sa pag-optimize sa memorya sa mga panda. Ingon usa ka sangputanan, gibansay ni Sergey ang CPU gamit ang tanan nga datos ug nakakuha mga 0,735.

Kini nga mga resulta igo na aron makadaog, apan among gitago ang among tinuod nga katulin ug dili makasiguro nga ang ubang mga team wala magbuhat sa ingon.

Away hangtod sa kataposan

Pag-tune sa Catboost

Ang among solusyon hingpit nga gipadaghan, gidugang namon ang mga bahin sa datos sa teksto ug mga imahe, mao nga ang nahabilin mao ang pag-tune sa mga parameter sa catboost. Gibansay ni Sergey ang CPU nga adunay gamay nga gidaghanon sa mga pag-uli, ug gibansay ko ang usa nga adunay ctr_complexity = 1. Adunay usa ka adlaw nga nahabilin, ug kung imong idugang ang mga pag-uli o dugang nga ctr_complexity, unya sa buntag mahimo ka nga makakuha og mas maayo nga tulin ug makalakaw sa tibuok adlaw.

Sa offline nga yugto, ang mga katulin mahimong dali nga matago pinaagi sa pagpili nga dili ang labing kaayo nga solusyon sa site. Gidahom namo ang dagkong mga kausaban sa leaderboard sa kataposang mga minuto sa wala pa magsira ang mga gisumite ug nakahukom nga dili mohunong.

Gikan sa video ni Anna, nahibal-an nako nga aron mapauswag ang kalidad sa modelo, labing maayo nga pilion ang mosunod nga mga parameter:

  • pagkat-on_rate β€” Ang default nga kantidad gikalkulo base sa gidak-on sa dataset. Ang pagdugang sa pagkat-on_rate nanginahanglan pagdugang sa gidaghanon sa mga pag-uli.
  • l2_leaf_reg β€” Regularization coefficient, default value 3, mas maayo nga pilion gikan sa 2 ngadto sa 30. Ang pagkunhod sa bili mosangpot sa pagtaas sa overfit.
  • bagging_temperature - nagdugang randomization sa mga gibug-aton sa mga butang sa sample. Ang default value mao ang 1, diin ang mga gibug-aton gikuha gikan sa exponential distribution. Ang pagkunhod sa kantidad nagdala ngadto sa pagtaas sa overfit.
  • random_kusog - Makaapektar sa pagpili sa mga split sa usa ka piho nga pag-uli. Kon mas taas ang random_strength, mas taas ang kahigayonan nga mapili ang ubos nga importansya. Sa matag sunod-sunod nga pag-uli, ang randomness mikunhod. Ang pagkunhod sa kantidad nagdala ngadto sa pagtaas sa overfit.

Ang ubang mga parameter adunay mas gamay nga epekto sa katapusan nga resulta, mao nga wala ko mosulay sa pagpili kanila. Ang usa ka pag-uli sa pagbansay sa akong dataset sa GPU nga adunay ctr_complexity=1 mikuha ug 20 ka minuto, ug ang pinili nga mga parametro sa gipakunhod nga dataset gamay ra nga lahi sa labing maayo sa tibuok nga dataset. Sa katapusan, gibuhat nako ang mga 30 nga mga pag-usab sa 10% sa mga datos, ug unya mga 10 pa nga mga pag-usab sa tanan nga mga datos. Kini nahimo nga ingon niini:

  • pagkat-on_rate Nadugangan ko og 40% gikan sa default;
  • l2_leaf_reg gibiyaan kini sa samang;
  • bagging_temperature ΠΈ random_kusog mikunhod ngadto sa 0,8.

Makahinapos kita nga ang modelo gipaubos sa mga default nga mga parameter.

Natingala kaayo ko sa dihang nakita nako ang resulta sa leaderboard:

Ang modelo modelo 1 modelo 2 modelo 3 ensemble
Kung walay tuning 0.7403 0.7404 0.7404 0.7407
Uban sa tuning 0.7406 0.7405 0.7406 0.7408

Nakahinapos ako alang sa akong kaugalingon nga kung dili kinahanglan ang dali nga aplikasyon sa modelo, nan mas maayo nga ilisan ang pagpili sa mga parameter nga adunay usa ka ensemble sa daghang mga modelo gamit ang mga dili na-optimize nga mga parameter.

Gi-optimize ni Sergey ang gidak-on sa dataset aron ipadagan kini sa GPU. Ang pinakasimple nga kapilian mao ang pagputol sa bahin sa datos, apan mahimo kini sa daghang mga paagi:

  • anam-anam nga tangtangon ang labing karaan nga datos (sugod sa Pebrero) hangtod nga ang dataset magsugod sa pagpahiangay sa memorya;
  • kuhaa ang mga bahin nga adunay labing ubos nga importansya;
  • kuhaa ang userId nga adunay usa lamang ka entry;
  • ibilin lang ang userId nga naa sa pagsulay.

Ug sa katapusan, paghimo usa ka ensemble sa tanan nga mga kapilian.

Ang katapusan nga ensemble

Sa ulahing bahin sa gabii sa katapusang adlaw, among gibutang ang usa ka grupo sa among mga modelo nga miresulta sa 0,742. Sa tibuok gabii gilusad nako ang akong modelo nga adunay ctr_complexity=2 ug imbes 30 minutos nagbansay kini sulod sa 5 ka oras. Sa alas 4 lang sa buntag kini giihap, ug akong gihimo ang kataposang ensemble, nga naghatag ug 0,7433 sa public leaderboard.

Tungod sa lain-laing mga pamaagi sa pagsulbad sa problema, ang atong mga panagna dili lig-on nga correlated, nga naghatag sa usa ka maayo nga pagtaas sa ensemble. Aron makakuha og maayong ensemble, mas maayo nga gamiton ang hilaw nga modelo nga prediksyon nga gitagna (prediction_type='RawFormulaVal') ug itakda ang scale_pos_weight=neg_count/pos_count.

SNA Hackathon 2019

Sa website makita nimo katapusan nga mga resulta sa pribado nga leaderboard.

Ubang mga solusyon

Daghang mga koponan ang nagsunod sa mga kanon sa mga algorithm sa nagrekomenda nga sistema. Ako, dili usa ka eksperto sa kini nga natad, dili makatimbang-timbang kanila, apan nahinumdom ko sa 2 nga makapaikag nga mga solusyon.

  • Ang solusyon ni Nikolay Anokhin. Si Nikolay, nga usa ka empleyado sa Mail.ru, wala mag-aplay alang sa mga premyo, mao nga ang iyang katuyoan dili aron makab-ot ang labing taas nga tulin, apan aron makakuha usa ka dali nga masukod nga solusyon.
  • Ang desisyon sa team nga nakadaog sa Jury Prize base sa kini nga artikulo gikan sa facebook, gitugotan alang sa maayo kaayo nga pag-cluster sa imahe nga wala’y manual nga trabaho.

konklusyon

Unsa ang labing nagpabilin sa akong panumduman:

  • Kung adunay mga categorical nga bahin sa datos, ug nahibal-an nimo kung giunsa ang husto nga pag-encode sa target, mas maayo pa nga sulayan ang catboost.
  • Kung nag-apil ka sa usa ka kompetisyon, dili ka mag-usik ug oras sa pagpili sa mga parameter gawas sa pagkat-on_rate ug mga pag-uli. Ang usa ka mas paspas nga solusyon mao ang paghimo sa usa ka ensemble sa daghang mga modelo.
  • Makakat-on ang mga Boostings sa GPU. Ang Catboost dali nga makakat-on sa GPU, apan mokaon kini og daghang memorya.
  • Atol sa pagpalambo ug pagsulay sa mga ideya, mas maayo nga magbutang ug gamay nga rsm~=0.2 (CPU lang) ug ctr_complexity=1.
  • Dili sama sa ubang mga team, ang ensemble sa among mga modelo naghatag usa ka dako nga pagtaas. Nagbinayloay lang kami og mga ideya ug nagsulat sa lain-laing mga pinulongan. Kami adunay lahi nga pamaagi sa pagbahin sa datos ug, sa akong hunahuna, ang matag usa adunay kaugalingon nga mga bug.
  • Dili klaro kung ngano nga ang pag-optimize sa ranggo nahimo nga labi ka daotan kaysa pag-optimize sa klasipikasyon.
  • Nakakuha ako pipila ka kasinatian sa pagtrabaho sa mga teksto ug usa ka pagsabut kung giunsa gihimo ang mga sistema sa rekomendasyon.

SNA Hackathon 2019

Salamat sa mga organizers sa mga emosyon, kahibalo ug premyo nga nadawat.

Source: www.habr.com

Idugang sa usa ka comment