ML Ops Study # 1 https://ml-ops.connpass.com/event/73814/ における発表資料です。SmartNews Ads でどのように機械学習を活用・運用しているのか、そのありのままの姿をお話しました。
SmartNews でのお仕事にもしご興味がありましたら https://smartnews.workable.com/ を御覧くださいませ 😳
SmartNews Ads ʹ͓͚Δػցֶशͷ׆༻ͱͦͷӡ༻2017-12-19 ML ops study #1KOMIYA Atsushi
View Slide
@komiya_atsushi
લఏɾഎܠ
୭͕ػցֶशΛѻ͍ͬͯΔͷ͔ʁ• SmartNews ʹ͓͍ͯػցֶशΛѻ͏ͷ ιϑτΣΞΤϯδχΞͷ͓ࣄ• ϓϩμΫγϣϯ࣭ͷίʔυͰ࣮͠ɺ γεςϜΛӡ༻Ͱ͖Δ͜ͱ͕લఏ• ʮSmartNews ͷΤϯδχΞશһػցֶशͰ͖Δʯͱ͍͏ҙຯͰͳ͍͜ͱʹҙ
୭͕ػցֶशΛѻ͍ͬͯΔͷ͔ʁ• Ϟσϧ։ൃ͚ͩΛ͢ΔʮσʔλαΠΤϯςΟετʯతͳϝϯόʔ͍ͳ͍• Ϟσϧ։ൃ͔ΒϓϩμΫγϣϯల։ɺੳ·Ͱ͕ΤϯδχΞͷ͓ࣄ• ʮσʔλαΠΤϯςΟετʯ͕͍ͳ͍ɺͱ͍͏Θ͚Ͱͳ͍͜ͱʹҙ• ֤छੳΛಘҙͱ͢ΔʮσʔλαΠΤϯςΟετʯ͍Δ
ͲͷΑ͏ͳڥͰػցֶशͯ͠Δͷ͔ʁ• Uber ͷ Michelangelo Έ͍ͨʹચ࿅͞ΕͨڥͰͳ͍• ࢀߟ: https://eng.uber.com/michelangelo/• DMP Λߏங͠ɺͦͷ্ͰػցֶशλεΫΛ͜ͳͯ͠Δ• σʔλετΞ: S3 (ϩά), RDS (Ϛελσʔλ)• ࢄॲཧ: Hive / Spark on EMR, Presto• ϫʔΫϑϩʔཧ: Azkaban
ʮ"%%BUB&OHJOFFSJOHJOQSBDUJDF4NBSU/FXT"ETཪͷσʔλγεςϜʯΑΓIUUQCJUMZ4/5FDI/JHIU-BO
ͲͷΑ͏ʹ։ൃ͍ͯ͠Δͷ͔ʁ• ಛʹࠂपΓͷγεςϜʹ͓͍ͯɺߴ͍ଐਓੑͷͱͰͷ։ൃ͕ߦΘΕ͍ͯΔ• ։ൃεϐʔυΛ༏ઌ͠ɺଐਓੑΛڐ༰• ͜ͷ͋ͨΓͷҙࢥܾఆʹ͍ͭͯɺৄ͘͠ SmartNewsAds େਤղ (SmartNews TechNight vol.5) ͷൃදࢿྉΛࢀর• https://www.slideshare.net/smartnews/smartnews-technight-vol5-smartnews-ads
͋ΘͤͯಡΈ͍ͨൃදࢿྉ• SmartNews ͷσʔλαΠΤϯςΟετͷ ߴΠςϨʔγϣϯΛࢧ͑ΔࠂγεςϜ (AWS Summit Tokyo 2015)• http://bit.ly/SN-AWS2015• AD Data Engineering in practice: SmartNews AdsཪͷσʔλγεςϜ (SmartNews TechNight vol.5)• http://bit.ly/SN-TechNight5-Lan
SmartNews Ads ʹ͓͚Δػցֶशͷ׆༻ɾӡ༻ࣄྫ
લॲཧ / ֶश / ༧ଌ / ධՁͦΕͧΕʹ͍͓ͭͯ͠·͢
Ͳ͜ͰػցֶशΛར༻͍ͯ͠Δͷ͔ʁ• ʢҎԼҰྫʣ• ༧ଌ୯Ґ: Ϣʔβ• ੑผਪఆ, ྸਪఆ• ༧ଌ୯Ґ: Ϣʔβ x ࠂ• ΫϦοΫ༧ଌ, ίϯόʔδϣϯ༧ଌ• ࠂ৴ͷϩάͳͲΛར༻ֶͯ͠श͍ͯ͠Δ
ͲͷΑ͏ʹલॲཧ͍ͯ͠Δͷ͔ʁ"ETFSWFSTJNQDMJDLDW-PHCVDLFU %.1CVDLFU"EEFMJWFSZMPH+PJO)JWF2-'FBUVSFFYUSBDUJPO)JWF2-'FBUVSFTJOUFSNFEJBUF%BUBTFU-JC47.GPSNBU(FOFSBUFEBUBTFUGPSFBDI.-UBTL)JWF2-
ͲͷΑ͏ʹֶशɾ༧ଌ͍ͯ͠Δͷ͔ʁ• ֶशʢࠓͷͱ͜Ζʣͯ͢ΦϑϥΠϯͰॲཧ͍ͯ͠Δ• ༧ଌରͷλεΫʹΑͬͯΦϑϥΠϯͱΦϯϥΠϯΛ͍͚͍ͯΔ• ΦϑϥΠϯ༧ଌ• ੑผਪఆ, ྸਪఆ• ΦϯϥΠϯ༧ଌ• ΫϦοΫ༧ଌ, ίϯόʔδϣϯ༧ଌ
ͲͷΑ͏ʹֶश͍ͯ͠Δͷ͔ʁ%.1CVDLFU%BUBTFU-JC47.GPSNBU&$*OTUBODFGPSUSBJOJOH1SFEJDUJPONPEFM5SBJO1SFEJDUJPONPEFMຖʹ༧ଌϞσϧΛอ࣋
ͲͷΑ͏ʹ༧ଌ͍ͯ͠Δͷ͔ʁ%.1CVDLFU'FBUVSFTJOUFSNFEJBUF1SFEJDUJPOSFTVMU1SFEJDUBMMJUFNT)JWF2-X6%'"VEJFODFUBCMF8SJUFSFTVMU)JWF2-X6%'※ΦϑϥΠϯ༧ଌͷ߹1SFEJDUJPONPEFM
ͲͷΑ͏ʹΦϑϥΠϯ༧ଌͷ݁ՌΛར༻͢Δͷ͔ʁ• ࠂϦΫΤετͷɺDynamoDB ͔Βitem Λඇಉظతʹऔಘ͍ͯ͠Δ• Ωϟογϡ͍ͯ͠ͳ͍ (ͯ͠ҙຯ͕ͳ͍)
͔͜͜ΒઌΦϯϥΠϯ༧ଌʹಛԽͨ͠ʹͳΓ·͢
ͲͷΑ͏ʹΦϯϥΠϯ༧ଌ͍ͯ͠Δͷ͔ʁϢʔβ"ộࠂࠂࠂࠂOʴϢʔβͷಛྔࠂ͝ͱͷಛྔ༧ଌϞσϧộ༧ଌ݁Ռ%ZOBNP%# QFSVTFS QFSUJNFVOJU4+7.IFBQ QFSUBTL4+7.IFBQ QFSBE
ͲͷΑ͏ʹಛϕΫτϧΛѻ͍ͬͯΔͷ͔ʁ• ༧ଌʹඞཁͳಛϕΫτϧΛղͨ͠ঢ়ଶͰ֤छετϨʔδʹͯอ࣋͢Δ• Ϣʔβͷಛྔ: DynamoDB (όον/ϦΞϧλΠϜߋ৽)• ࠂͷಛྔ: S3 (JVM ώʔϓ্ͰΩϟογϡ)• ࠂϦΫΤετͷதͰɺϢʔβ༝དྷͷಛྔΛDynamoDB ͔Βऔಘ → ࠂ͝ͱʹಛϕΫτϧΛ࡞ͬͯͦΕͧΕ༧ଌɺͱ͍ͯ͠Δ
ͲͷΑ͏ʹಛϕΫτϧΛ४උ͍ͯ͠Δͷ͔ʁ"ETFSWFSTJNQDMJDL DW,JOFTJTTUSFBNT4QBSLTUSFBNJOHPO&.36TFSGFBUVSF8SJUFFWFSZNJOVUF※ϢʔβಛྔͷϦΞϧλΠϜߋ৽
ͲͷΑ͏ʹ༧ଌϞσϧΛѻ͍ͬͯΔͷ͔ʁ• ֶशࡁΈͷ༧ଌϞσϧ S3 όέοτ্ʹଘࡏ͢Δ• ࠂαʔόͦͷ༧ଌϞσϧΛμϯϩʔυ & ϩʔυͯ͠ώʔϓ্Ͱอ࣋͢Δ• ༧ଌػೳࠂαʔόʹแ͞Ε͍ͯΔ (͔ͳΓີ݁߹)• github.com/komiya-atsushi/xgboost-predictor-java• ༧ଌϞσϧࠂαʔόΛఀࢭͤͣʹϦϩʔυͰ͖Δ
ͲͷΑ͏ʹ༧ଌϞσϧͷ A/B ςετΛ࣮ݱ͍ͯ͠Δͷ͔ʁ• ࠂαʔόෳͷ༧ଌϞσϧΛಉ࣌ʹϩʔυͰ͖ΔػߏΛඋ͍͑ͯΔ• ͦΕͧΕͷ༧ଌϞσϧʹʮϥϕϧʯ͕༩͞Ε͍ͯΔ• A/B ςετͷϑϨʔϜϫʔΫͰͦͷʮϥϕϧʯΛࢦఆ͢Δ͜ͱͰɺ࣮ݧ܈͝ͱʹར༻͢Δ༧ଌϞσϧΛΓସ͑ΒΕΔ• DynamoDB ্ͷಛྔʹϥϕϧ͕༩͞Ε͍ͯΔͷͰɺ༧ଌϞσϧʹ߹ΘͤͨಛྔΛ༻ҙ͢Δ͜ͱ͕Ͱ͖Δ
ͲͷΑ͏ʹධՁ͍ͯ͠Δͷ͔ʁ• ༧ଌ݁Ռ vs ࣮ͷධՁϝτϦΫεΛ daily/hourlyͰࢉग़ͯ͠ Slack νϟϯωϧʹ௨• ධՁϝτϦΫεͷྫ• Normalized entropy• Logloss• AUC
ͳͥΦϯϥΠϯ༧ଌ͢Δͷ͔ʁ• ΦϯϥΠϯ༧ଌγεςϜతʹෳࡶʹͳΓ͕ͪ & Πϯϑϥͷίετ͕͔͔Γ͕ͪͱ͍͏σϝϦοτ͕͋Δ• ࠂʹ͓͚ΔΫϦοΫɺίϯόʔδϣϯ༧ଌɺظతʹதظతʹച্ʹͶฦͬͯ͘Δࢪࡦͱ͍͏͜ͱͰऔΓΜͰ͍Δ• ظతɿظऩӹͷߴ͍ࠂΛ৴͢ΔͨΊ• தظతɿࠂओ (ཧళ) ʹྑ͍ύϑΥʔϚϯε (҆ՁͰଟ͘ͷ֫ಘ) Λఏڙ͠ɺܧଓͯ͠ࠂग़ߘ͍ͨͩͨ͘Ί
·ͱΊ
·ͱΊ• AWS ͷ֤छαʔϏε & ΦʔϓϯιʔεϓϩμΫτΛ׆༻ͯ͠ DMP Λߏங͠ɺػցֶशλεΫΛ͜ͳ͍ͯ͠Δ• গਫ਼ӶͰ։ൃΛਐΊ͍ͯΔ͕Ώ͑ɺػցֶशͷϓϥοτϑΥʔϜͱͯ͠·ͩվળͷ༨͕͋Δͣ
We’re HIRING ❗❗❗• bit.ly/SmartNews-Hiring• Data scientist• Data engineer• Software engineer, Ads machine learning• Software engineer, Machine learning (news)
Thank you!