SNA Hackathon 2019

Mense Februario-March 2019, certatio habita est ut retis socialibus pascendis anteponeretur SNA Hackathon 2019in qua turma nostra primum locum obtinuit. In articulo, de ordine certationis, de methodis quae conavimus, dicam, et catboost occasus pro magna notitia eruditionis.

SNA Hackathon 2019

SNA Hackathon

Hoc tertium est quod hackathon sub hoc nomine facta est. Ok.ru retis socialibus ordinatur, munus et notitia directe huic network socialis coniunguntur.
SNA (analysis retis socialis) in hoc casu rectius intelligitur non ut analysis graphi socialis, sed analysis retis socialis.

  • In 2014, negotium erat praedicere numerum cursorium velit.
  • In 2016 - negotium VVZ (fortasse familiarius) propius ad analysim graphi socialis.
  • In 2019, ordo usoris feed fundatur in verisimili quod usor amo posti.

De 2014 dicere non possum, sed 2016 et 2019, praeter facultates analysin notatae, artes operandi cum magnis datae etiam requirebantur. Puto compositum machinae eruditionis et magnae processus notitiae quaestiones, quae me ad has certationes attraxerunt, et experientia mea in his locis me vincendum adiuvit.

mlbootcamp

In MMXIX, certamen in suggestu constitutum est https://mlbootcamp.ru.

Certamen in online die 7 mensis Februarii incepit et ex 3 operibus constabat. Quisquam subcriptio in situ, download basi collocantur et currus tuos onerant per aliquot horas. In fine stadii interretialis die XV mensis Martii, summa XV cuiusque spectaculi saliendi eventus vocati sunt ad officium Mail.ru pro scaena offline, quod fiebat a die 15 Martii ad 15 Aprilis.

negotium

Fons notitia praebet user IDs (userId) et post IDs (objectId). Si usor cursorium ostensus est, data linea continentem userId, objectId, usoris reactiones huic posti (videre) ac varias lineas vel nexus cum imaginibus et textibus constituit.

userId objectId ownerId feedback images
3555 22 5677 [probaverunt, clicked] [hash1]
12842 55 32144 [invisus] [hash2, hash3]
13145 35 5677 [clicked, shared] [hash2]

Expertus notitiae copiae similem structuram continet, sed campus feedback deest. Negotium est praedicere praesentiam 'amavit' reactionem in agro feedback.
Submissio file habet in structuram sequentem:

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

Res metrica mediocris ROC AUC usorum est.

Accuratior descriptio notitiarum inveniri potest concilio website. Potes etiam illic datas extrahere, inter probationes et picturas.

Online scaena

In scaena online, negotium in 3 partes divisum est

  • Collaborativa ratio β€” omnes lineamenta comprehendit praeter imagines et textus;
  • imagini β€” notitias tantum de imaginibus includit;
  • texts - Informationes tantum de textibus includit.

Offline stage

In scaena online notitia omnia lineamenta comprehendit, cum textus et imagines sparsae essent. Erant 1,5 temporibus plures ordines in dataset, quorum iam multum erant.

Solutio quaestionis

Cum CV operando facio, iter in hoc certamine cum "Imagines" molis institui. Notitia quae praebebatur erat userId, objectId, ownerId (coetus in quo cursorium divulgabatur), indicationes temporis ad creandum et proponendum cursorem, et, sane, imaginem huius postis.
Post varias notas in indicatione temporis generandas, altera notio erat ut stratum penultimum neuronis in imagine imaginis praeexercitatum duceret et has inclusiones ad boosting mitteret.

SNA Hackathon 2019

Eventus gravis non. Embedera ex neurono imaginati nihili sunt, duxi, opus meum autoencoder facere.

SNA Hackathon 2019

Praesent mattis tempus quam nec condimentum.

Feature generation

Imaginibus opus multum temporis accipit, ut aliquid simplicius facere constitui.
Ut statim videre potes, plures notae categoricae in notitiaset, et ne nimium molestus sim, modo catboost cepi. Solutio praeclarissima erat, sine ullis fundis statim ad primam aciem ducis perveneram.

Satis multa notitia est et in forma parquet posita est, ideo sine bis cogitans, scala cepi et omnia in scintilla scribere coepi.

Simplicissima lineamenta quae plus incrementi quam imaginis emblemationes dederunt;

  • quotiens objectId, userId et possessorId in notitia apparuerunt (commodo referant);
  • quot postes userId viderit a ownerId (referre debet cum cura usoris in coetus);
  • quot unique userIds nuntia visae a ownerId (reflects size of the group’s auditors).

A indicationibus temporis impetrari potuit tempus diei quo usor pascendi (mane/meridiem/vesper/noctem spectabat). Has categorias coniungendo, lineamenta generare pergere potes;

  • how many times userId Initium vespere;
  • quo tempore haec positio saepissime ostenditur et sic porro.

Haec omnia gradatim metricam emendaverunt. Sed magnitudo datase disciplinae est circiter 20M monumentis, ideo lineamenta additamenta disciplinae valde retardavit.

Accessum meum ad usura data recogitavi. Quamvis notitia temporis dependens, nullas notas manifestas vidi perstillare "in futuro", tamen, in casu tantum, illud sic destruxi;

SNA Hackathon 2019

Disciplina institutio provisa nobis (Februarii et 2 septimanae Martii) in 2 partes divisa est.
Exemplar instructum est in notitia ex proximis N diebus. Universitates supra scriptae aedificatae sunt in omnibus notitiis, incluso experimento. Eodem tempore, notitia apparuit qua varias formas scopo variabilis aedificare potest. Simplicissimus accessus est ad codicem reuse qui novas notas iam condat, et simpliciter illud alat notitias in qua institui et oppugnare non poterit =1.

Sic similia lineamenta cepimus:

  • Quotiens in userId cursorem in globo possessoris vidi;
  • Quotiens userId probaverunt tabellam in group ownerId;
  • Recipis nuntia quae userId ab possessore amati sunt.

Id est, evenit medium scopum modum translitterandi ex parte dataset pro variis complexionibus categoricis notarum. In principio, catboost etiam scopum descriptam aedificat et ex hac parte nullum beneficium est, sed, exempli gratia, fieri potest numerus usorum singularium qui in hoc coetus stipes numerari probaverunt. Eodem tempore praecipuum propositum consecutum est - notitiaset mea aliquoties redacta est, et lineamenta generantia continuare potuit.

Dum catboost modum translitterandi aedificare potest tantum in reactione amato innititur, opiniones alias reactiones habet: reshared, displicet, unliked, coniuctatio, neglecta, descriptae pro quibus manually fieri potest. Omnia genera aggregatorum retuli et lineamenta eliminata demissi momenti ita ut dataset non inflaret.

Illo tempore fui inprimis late margine. Sola res turbabat illa imago emblemationis prope nullum incrementum. Venit opinio omnia dare catboost. Imagines glomeramus Kmeans et novam plumam categoricam possidemus imageCat.

Hic nonnullae classes sunt post eliquationem manualem et racemorum concursum ex KMeans consecuti.

SNA Hackathon 2019

Ex imageCat generamus:

  • Novae notae categoricae:
    • which imageCat saepissime visum est ab userId;
    • Which imageCat most often shows ownerId;
    • Quod imageCat saepissime ab userId amatus est;
  • Varii calculi:
    • Quot unique imageCat aspexit userId;
    • Circiter 15 similes lineamenta plus scopo descriptam ut supra descripsimus.

texts

Eventus in certaminis imagine mihi apti sunt et manum meam in textibus experiri decrevi. Non multum peregi textibus ante, et diem inepte peremi tf-idf et svd. Tunc vidi baseline cum doc2vec, quod prorsus facit quod opus est. Cum leviter parametros doc2vec accommodaverit, textum embeddingum accepi.

Tunc igitur simpliciter codicem pro imaginibus reddidi, in quo imaginem infixam cum textu involucris reposui. Quam ob rem in certaminis textu 2 locum cepi.

Collaborativa ratio

Unum certamen relictum est quod nondum cum baculo "Icutum" et ab auc in ductore dijudicans, eventus huius certaminis maximum momentum in scaena offline habere debuit.
Omnes lineamenta quae in fonte data erant tuli, categoricas selectas et eadem aggregata ac pro imaginibus computavi, exceptis features quae in ipsis imaginibus fundabantur. Just posito hoc in catboost obtinuit me ad 2nd locum.

Primum gradus catboost ipsum

Una prima et duo secunda loca mihi placebant, sed erat intellectus me non fecissem aliquid speciale, quod per iacturam locorum me sperare possem.

Negotium certationis est stationes in utentis ponere, et omne hoc tempus solvens problema classificationem, id est, optimizing iniuriam metricam.

Simplicem vobis demus exemplum;

userId objectId praedictionem terram vero
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

Parva faciamus permutatio

userId objectId praedictionem terram vero
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

Sequentes consequimur:

exemplum urbis User1 AUC User2 AUC medium AUC
optio 1 0,8 1,0 0,0 0,5
optio 2 0,7 0,75 1,0 0,875

Ut videre potes, meliorem altiorem AUC metricam non significat mediocris AUC metrica intra usorem emendare.

Catboost novit quomodo optimize ordo metrics de archa. Lego de ordo metrica; victoria fabulas cum usura catboost et profectus YetiRankPairwise instituendi pernoctare. Nulla in efficitur erat. Iudicans me undertrainatum esse, erroris functionem in QueryRMSE mutavi, quae, documentis catboosticis iudicans, citius convergit. Ad extremum, eosdem eventus comparavi ac cum disciplina classificationis, sed horum duorum exemplorum imagines multum incrementi dederunt, quae me in omnibus tribus certationibus primum locum attulerunt.

V minuta ante occlusionem stadii interretialis certationis "Collaborative Systems", Sergey Shalnov me ad alterum locum movit. Ulterior iter una ambulavimus.

Praeparans ad offline

Praestare victoriam in stadio interretiali cum RTX 2080 TI in schedulis, sed praemium principale 300 rublorum, ac fere, etiam primus locus postremus his tribus septimanis laborare nos coegit.

Cum vertit, Sergey catboost etiam usus est. Commutavimus notiones et lineamenta, et cognovimus report by Anna Veronica Dorogush quae multis quaestionibus meis responsa continebat, iisque, quos nondum illo tempore habebam.

Renuntiatio spectans me induxit ad ideam quam necesse est omnes parametri reddere ad valorem default, et occasus diligentissime perfice et solum post determinatam notarum definitionem. Nunc una disciplina circiter horarum XV suscepit, sed unum exemplum celeritatis melius obtinendum curavit quam quod in ordine cum ordine consecutus est.

Feature generation

In Systematis Collaborativis certaminibus, magnus numerus linearum magni momenti pro exemplo aestimantur. Exempli gratia auditweights_spark_svd - Praecipuum signum, sed nulla notitia quid sibi velit. Operae pretium esse duxi varias aggregationes in magni momenti notis numerare. Exempli gratia, mediocris auditweights_spark_svd ab usuario, coetus, ab obiecto. Eadem computari potest notitia utendi in qua nulla disciplina exercetur et clypeum = 1, id est, mediocris auditweights_spark_svd a user ab objectis voluisset. Magna praeterea signa auditweights_spark_svdplures erant. Hic sunt quidam eorum;

  • auditweightsCtrGender
  • auditweightsCtrHigh
  • userOwnerCounterCreateLikes

Nam ut orci auditweightsCtrGender secundum userId evenit ut momenti pluma, sicut valor mediocris userOwnerCounterCreateLikes per userId+ownerId. Hoc iam faciendum tibi videtur, ut intellegatur sensus agrorum.

Etiam magna features erant auditweightsLikesCount ΠΈ auditweightsShowsCount. Alter ab altero dividens, maioris momenti notam adeptus est.

Data pinum

Competition et effectio exemplandi valde diversa sunt opera. Cum notitias parat, difficillimum est omnia singularia inspicere nec aliquas non parvas informationes de scopo variabili in probatione afferre. Si solutionem productionis creamus, notitiarum liberorum institutione exemplum vitare conabimur. Sed si contentionem vincere cupimus, tunc notitia liberorum optima lineamenta sunt.

Notitiae studuit, videre potes secundum objectId valores auditweightsLikesCount ΠΈ auditweightsShowsCount mutatio, quae significat proportio valorum maximorum harum features post conversionem multo melius reddet quam proportio tempore ostensionis.

Primum Leak invenimus is auditweightsLikesCountMax / auditweightsShowsCountMax.
Sed quid si notitias arctius spectemus? Let's sort by show date and get;

objectId userId auditweightsShowsCount auditweightsLikesCount scopum (amet)
1 1 12 3 verisimile non "
1 2 15 3 sic maybe
1 3 16 4

Mirum erat, cum primum tale exemplum inveni, et evenit quod mea praedicatio non evenit. Sed, ratione habita quod maximae valores harum notarum in obiecto incrementum dabant, non fuimus ignavi et decrevimus invenire. auditweightsShowsCountNext ΠΈ auditweightsLikesCountNextid est bona in proximo momento temporis. Addendo pluma
(auditweightsShowsCountNext-auditweightsShowsCount)/(auditweightsLikesCount-auditweightsLikesCountNext) acutum saltum celeriter fecimus.
Similia pinum adhiberi posse inveniendo valores sequentes for userOwnerCounterCreateLikes within userId+ownerId and, e.g. auditweightsCtrGender within objectId+userGender. VI similes agros invenimus cum scillo et ex eis quam maxime notitias excerpsimus.

Ab illo tempore quam maxime notitias de notis collaborativos expressimus, certationes ad imaginem et textum non redimus. Magnam habui notionem ad reprimendam: quantum faciunt lineamenta directe fundata in imaginibus vel textibus quae in certationibus pertinentibus dant?

Pluma in imagine ac textu certationis nullae fuerunt, sed eo tempore me parametri catboost defaltam reddidi, codicem purgavi et paucas lineamenta addidi. Summa fuit;

arbitrium mox
Maxime cum imaginibus 0.6411
Maxime imagines nullae 0.6297
Secundo loco effectus 0.6295

arbitrium mox
Maxime cum textibus 0.666
Maximum sine textibus 0.660
Secundo loco effectus 0.656

arbitrium mox
Maximum in collaborative 0.745
Secundo loco effectus 0.723

Apparebat nos abhorrere posse nos multa e textibus et imaginibus exprimi posse, et postquam duas notiones delectatissimarum rerum experti sumus, cum eis operari desivimus.

Praeterea generatio linearum in systematis collaborativis incrementum non dedit et ordinem incepimus. In scaena interretiali, classificatio et ordo ordinis mihi parvum incrementum dederunt, quod evenit quod classificationem subtraxi. Nulla functionum errorum, in iis YetiRanlPairwise, alicubi produxit circa exitum quem LogLoss fecit (0,745 vs. 0,725). Adhuc spes erat in QueryCrossEntropy quae deduci non poterat.

Offline stage

In stadio offline, structura notitiarum manebat eadem, sed mutationes minores erant;

  • identifiers userId, objectId, ownerId were rerandomized;
  • plura signa sublata sunt, plura appellata;
  • notitia crevit circiter 1,5 temporibus.

Praeter difficultates enumeratas unum magnum plus erat: turma magna cum servo RTX 2080TI partita est. Htop diu fruebar.
SNA Hackathon 2019

Una tantum fuit idea, ut id quod iam existit simpliciter exprimat. Cum horis duabus ambitum in calculonis constituentibus constituisset, sensim coepimus cognoscere eventus producendos esse. Praecipuum problema quod subimus est auctum in notitia voluminis. Nos decrevimus onus paululum minuere et parametri catboostici acti_complexitatem=1 ponere. Haec celeritas paulum demittit, sed exemplar meum opus incepit, effectus bonus erat - 0,733. Sergey, dissimile me, notitias non divisit in partes 2 et in omnes notitias exercuit, quamvis hoc optimum consequitur in scaena online, in scaena multae difficultates erant. Si omnes lineamenta quae generavimus cepimus et eas in catboost trudere conaremur, nihil in scaena interrete operarimus. Sergey optimization typus fecit, exempli gratia, genus convertens ad float64. Hic articulus, Informationes de memoria optimiizationis in pandas invenire potes. Quam ob rem, Sergey eruditus in CPU omnibus notitiis utens et circiter 0,735.

Hi eventus satis ad vincendum erant, sed veram celeritatem nostram celavimus nec posse certo certius esse alias iunctiones idem non facere.

Pugna ad ultimum

Catboost tuning

Nostra solutio plene expressa est, lineamenta notitiarum et imaginum textuum adiunximus, ut omnia quae supererant parametros catboostos concinerent. Sergey in CPU cum paucis iterationibus exercitatus, et in una cum ctr_complexitate eruditus sum = 1 . Superest unus dies, et si modo adieceris iterationes vel multiplicationem incomplexitatem, tunc mane melius velocius et tota die ambulare potuisti.

In scaena offline, velocitates facillime occultari potuerunt simpliciter eligendo non optimam solutionem in situ. Acrem mutationes in ductoris in ultimis momentis ante animadversiones clausas exspectavimus et decrevimus non cessare.

Ex Annae video, cognovi quod exemplar quale esset emendare, optimum est hos parametros eligere:

  • learning_rate - Valor default computatur secundum magnitudinem dataset. Doctrinae_rate augendae numerum iterations augere requirit.
  • l2_leaf_reg - Ordinationis coefficiens, valor defectus 3, potius elige a 2 ad 30. valorem decrescentem ducit ad incrementum in overfit.
  • bagging_tempature β€” randomization addit ad pondera rerum in sample. Valor default est 1, ubi pondera ex distributione exponentiali deducuntur. Valorem decrescentem ducit ad incrementum in overfit.
  • random_strength - Electionem scindit certa iteratione afficit. Quo superiora fortuiti sunt, altior casus humilis momenti scissurae electus est. In unaquaque sequenti iteratione, fortuiti decrescit. Valorem decrescentem ducit ad incrementum in overfit.

Ceteri parametri multo minorem effectum in effectu finali habent, ideo eas eligere non conor. Una iteratio institutionis meae GPU dataset cum ctr_complexitate=1 20 minuta accepit, et parametri delecti in dataset redactis leviter diversae erant ab optimalibus in plena notitiastae. In fine egi de 30 iterationibus in 10% notitiarum, et deinde de 10 pluribus iterationibus in omni notitia. Evenit aliquid simile hoc;

  • learning_rate 40% ex defectu auctus sum;
  • l2_leaf_reg idem reliquit;
  • bagging_tempature ΠΈ random_strength ad 0,8.

Concludi possumus exemplar per ambitum defaltam inexercitatum fuisse.

Valde miratus sum cum exitum viderem in auctoribus;

exemplum exemplar 1 exemplar 2 exemplar 3 ensemble
Sine tuning 0.7403 0.7404 0.7404 0.7407
Cum tuning 0.7406 0.7405 0.7406 0.7408

Pro me igitur conclusi, si celeris applicationis exemplaris non opus sit, melius est parametros delectu reponere cum pluribus exemplaribus parametris non optimized.

Sergey erat optimizing amplitudo dataset ad currendum in GPU. Optio simplicissima est abscindere partem notitiae, sed hoc fieri potest pluribus modis;

  • vetustissima notitia paulatim removenda (initium Februarii) usque dum notitiaseta in memoriam aptare incipit;
  • removere lineamenta minimi momenti;
  • remove userIds pro quibus unus tantum est introitus;
  • solum relinquas userIds quae in test.

Ac denique ex omnibus bene conveniatis.

Ultima Ensemble

Sero vespere diei proximi, exemplaribus nostris compositi sumus, quod 0,742. Pernoctare exemplar meum cum ctr_complexitate==2 et loco 30 minutarum pro 5 horis institutum contuli. Tantum ad 4 sum adnumeratum est, et ultimum synagogam feci, quod 0,7433 in ductore publico dedit.

Ob varias rationes ad problema solvendum, praedictiones nostrae haud valde connectuntur, quae bonum in synagoga incrementum dederunt. Ut bonum ensemble, melius est uti praedictiones rudis exemplar praedicunt (prediction_type='RawFormulaVal') et pone scale_pos_weight=neg_count/pos_count.

SNA Hackathon 2019

In pagina videre potes finales eventus in privatis leaderboard.

Aliae solutiones

Multi Partes secuti sunt canones algorithms suasoris ratio. Ego, in hac re non peritus, eas aestimare non possum, sed recordor 2 solutiones iucundas.

  • Nikolay Anokhin solutionem. Nikolay, cum Mail.ru operarius, praemia non petivit, ut propositum suum non celeritatem maximam consequi, sed solutionem facilem scalare obtineret.
  • Iudices Praemium winning quadrigis arbitrium fundatur hoc articulum a facebookpermisit ad imaginem valde bonam pampineam sine opere manuali.

conclusio,

Quae haesit in memoria mea maxime;

  • Si notae categoricae sunt in notitia, et scis quomodo scopum recte descriptam facere, melius adhuc catboost experiri.
  • Si es participando agone, non debes tempus terere deligendo parametros praeter discendi et iterationes. Celerior solutio est plurium exemplorum concursum facere.
  • Boostings in GPU discere potest. Catboost in GPU celerrime discere potest, sed multum memoriae devorat.
  • In evolutione et probatione idearum melius est rsm~=0.2 (CPU tantum) et ctr_complexitatem ==1.
  • Dissimiles aliis iugis, universitas exemplorum nostrorum magnum incrementum dedit. Tantum notiones commutavimus et variis linguis scripsimus. Aliam accessionem habuimus ad scindendum notitias et, puto, singulas proprias cimices.
  • Non liquet cur ordo optimization peior fiat quam classificatio optimizationis.
  • Experientiam aliquam consecutus sum operando cum textibus et intellectu quomodo systemata suadet.

SNA Hackathon 2019

Auctores gratias pro affectibus, scientia et praemiis accepimus.

Source: www.habr.com