Slide 1

Slide 1 text

RTBʹ͓͚Δ ػցֶशγεςϜͷ࣮૷ͱӡ༻ ɹ ΞυςΫελδΦ smalgo ੒ాರത 1

Slide 2

Slide 2 text

ࣗݾ঺հ ੒ాರത • ΞυςΫελδΦ/smalgo ΤϯδχΞ • ೖࣾ1೥൒ऑ • DSPΛ࡞͍ͬͯ·͢ • ओʹ഑৴ϩδοΫ։ൃʹؔΘ͍ͬͯ·͢ • ීஈ͸scala ͨ·ʹpython • scalaྺ͸2೥͘Β͍ • ഑৴ΞϧΰϦζϜʹؔ͢ΔڞಉݚڀͳͲ΋ 2

Slide 3

Slide 3 text

֓ཁ • RTBʹ͍ͭͯ • ػցֶशΛಈ͔ͨ͢Ίͷ • ࣮૷ͷ͜ͱ • ӡ༻΍ςετͷ͜ͱ ฐνʔϜ(smalgo)ͰͷࣄྫΛ঺հ͠·͢ɻ 3

Slide 4

Slide 4 text

RTB: Real Time Bidding 4

Slide 5

Slide 5 text

5

Slide 6

Slide 6 text

RTB: Real Time Bidding • ୭͕Ͳ͜ʹͲΜͳ޿ࠂΛදࣔ͢Δ͔ܾΊΔͨΊͷऔҾࢢ৔ • ଟ਺ͷSSP΍DSP͕΍ΓͱΓ • ޿ࠂ͕දࣔ͞ΕΕΔͨͼʹຖճΦʔΫγϣϯΛߦ͏ 6

Slide 7

Slide 7 text

7

Slide 8

Slide 8 text

• ଟ਺ͷSSP΍ΞυωοτϫʔΫͱ઀ଓ • ઀ଓઌ͕ओ࠵͢ΔΦʔΫγϣϯʹೖࡳ͢Δ • ͲΜͳਓ΍ͲΜͳ࿮ʹ͏·͘޿ࠂΛݟͤΒΕΔ͔? 8

Slide 9

Slide 9 text

༧ଌϞσϧͷ࣮૷ͷ͜ͱ 9

Slide 10

Slide 10 text

DSPʹඞཁͳ͜ͱͷྫ 1. ੥͚ෛͬͨΩϟϯϖʔϯͷ؅ཧ 2. λʔήςΟϯάͷ൑ఆ 3. ༧ࢉͷ؅ཧ 4. ೖࡳֹͷܾఆ • ͦͷΠϯϓϨογϣϯΛ͍͘ΒͰങ͏͔ݡ͘ߟ͑ͯೖࡳ͢Δ • ऩӹʹ௚݁͢Δ෦෼ 10

Slide 11

Slide 11 text

ೖࡳֹͷܾఆ ೖࡳֹΛܾΊΔͨΊʹɺ1ΠϯϓϨογϣϯͷՁ஋Λͦͷ౎౓ͳ Δ΂͘ਖ਼֬ʹܭࢉ͢Δඞཁ͕͋Δɻ ɹˢ͜͜ʹػցֶशΛ࢖͏ • యܕతʹ͸ Click Through Rate(CTR) ༧ଌϞσϧͳͲ • クリック単価 Ͱೖࡳ • ଞʹ͸ɺಈըͷࢹௌ։࢝཰ͷ༧ଌͳͲͳͲ 11

Slide 12

Slide 12 text

଎౓͕ॏཁ ී௨ͷwebαʔϏεͱൺֱͯ͠଎౓ʹର͢Δཁ͕݅ݫ͍͠ • εϧʔϓοτ • bidϦΫΤετ͕10ສճ/ඵ͙Β͍དྷΔɻ ͦͷ͏ͪ1ສ͘Β͍ʹೖࡳ͢Δ • ϨΠςϯγ • webϖʔδͷϩʔυͷؒʹશ͕ͯऴΘͬͯ͠·͏ɻ ͲΜͳʹ஗͘ͱ΋50ms͙Β͍ͰϨεϙϯεΛฦ͢ඞཁ͕͋Δɻ 12

Slide 13

Slide 13 text

༧ଌʹ࢖ͬͯΔม਺ • ࣌ࠁ • ΩϟϯϖʔϯͷID • ޿ࠂͷදࣔҐஔ,αΠζ,υϝΠϯ • ios͔ android͔ PC͔ • etc.. etc.. 13

Slide 14

Slide 14 text

GBDT Gradient Boosted Decision Tree • ओʹ࢖͍ͬͯΔ༧ଌϞσϧ • ೋ෼ܾఆ໦Λ͍ͭ͘΋ฒ΂ɺग़ྗͷ ࿨ʹΑͬͯ༧ଌ͢Δ • IF෼Λͨ͘͞ΜḷΔ͚ͩͰࡁΈ ༧ଌ͕ͦΕͳΓʹߴ଎Ͱ࣮૷͠΍͢ ͍ 14

Slide 15

Slide 15 text

GBDTͷخ͍͠఺ ΧςΰϦΧϧͳม਺(໊ٛई౓)ʹڧ͍ɻ • ͨͱ͑͹ IPΞυϨε ɾ υϝΠϯ ͷΑ͏ͳจࣈྻ • ػցֶशͷଟ͘ͷϞσϧͰ͸ɺ͜͏͍͏ม਺Λແཧ΍Γ࿈ଓ ͳϕΫτϧ஋ʹΤϯίʔυ͢Δඞཁ͕͋Δ (cf. word2vec) • ܾఆ໦͸ೖྗ͕ϕΫτϧ஋Ͱͳͯ͘΋Α͘࢖͍΍͍͢ɻ 15

Slide 16

Slide 16 text

σʔλ෼ੳͷ؀ڥ͸֎෦ʹ͋Δ • ޿ࠂ഑৴αʔόʔ΄΅scala(ͱjava)Ͱಈ͍͍ͯΔɻ • ҰํͰɺσʔλ෼ੳͷଟ͘͸pythonͷ؀ڥͰߦΘΕΔ • jupyter notebook, pandas, etc.. • ༧ଌϞσϧͷ࡞੒΋͜ΕΒͷπʔϧΛ࢖͍ͬͯΔɻ • ੈք͸scala΍javaͰด͍ͯ͡ͳ͍ 16

Slide 17

Slide 17 text

ֶशثͱ༧ଌثΛผʑʹ༻ҙ͢Δ • ഑৴ϩά͔Β֤छ༧ଌϞσϧΛఆظతʹֶश͢Δ • ༧ଌϞσϧΛJSONʹΤϯίʔυ͠ೖࡳαʔόʔʹड͚౉͢ • ೖࡳαʔόʔଆʹऔΓࠐΈɺ༧ଌϞσϧΛscalaͰ࠶ߏங 17

Slide 18

Slide 18 text

GBDTΛjsonʹΤϯίʔυ ܾఆ໦Λදݱ͢Δ sealed trait BinaryDecisionTree { def findLeaf(features: Array[Feature]): LeafNode } case class LeafNode(value: Double) extends BinaryDecisionTree { def findLeaf(features: Array[Feature]): LeafNode = this } case class BranchNode( condition: Feature, yes: BinaryDecisionTree, no: BinaryDecisionTree ) extends BinaryDecisionTree { ... } 18

Slide 19

Slide 19 text

GBDTΛjsonʹΤϯίʔυ ܾఆ໦ͷ഑ྻͱͯ͠argonautΛ࢖ͬͯJSONԽ [{ //ࢬϊʔυ͸෼ذͷ৚݅ͱ2ݸͷࢠϊʔυΛදݱ "condition": {"name":"size","value":"320x50"}, "yes": 1.0, //༿ϊʔυ͸஋͚ͩΛॻ͘ "no" { // ࢬϊʔυΛ࠶ؼతʹΤϯίʔυ͢Δ "condition": {...}, "yes": ..., "no": ... } },...] 19

Slide 20

Slide 20 text

શମͷྲྀΕ 20

Slide 21

Slide 21 text

༧ଌϞσϧͷӡ༻ɾςετͷ͜ͱ 21

Slide 22

Slide 22 text

ޭࡑ ༧ଌͱֶशΛผʑͷ࣮૷ʹ෼཭ͨ͠ͷͰ… • [pros] ֶशଆͷ࣮૷ʹґଘ͠ͳ͍ • JSON͑͞ు͚͹ͲΜͳֶशΛಈ͔ͯ͠΋ྑ͍ɻ • [cons] I/OΛ࣮૷͢ΔखؒͱόάͷϦεΫ͕૿͑Δ • ֶशଆͱ༧ଌଆͰ࣮૷͕ҧͬͯ͠·͏͕ɺಉ͡ϞσϧΛಈ͔͢ඞཁ • ͖ͪΜͱ֬ೝ͕͍Δʢ͜͜ͷ࿩͸ޙ΄Ͳʣ 22

Slide 23

Slide 23 text

ػցֶशͷӡ༻ɾςετʹ͍ͭͯ ༧ଌϞσϧ͕ਖ਼͘͠ޮՌΑ͘ಈ͘͜ͱΛ୲อ͠ͳ͍ͱ͍͚ͳ͍ • ༧ଌϞσϧͷޮՌͷྑ͠ѱ͕͠ޙ͔Β෼͔Δඞཁ͕͋Δ • Ұ౓ֶशͨ͠༧ଌϞσϧ͸ɺ͕࣌ؒͨͭ΄Ͳਫ਼౓͕མͪଓ͚ Δ →ఆظతʹֶशͯͦ͠ͷ౎౓νΣοΫ͕ඞཁ • ෆ۩߹͕͋ͬͯ΋ҰݟͦΕΒ͍͠஋͕ग़ྗ͞Εͯ͠·͏ 23

Slide 24

Slide 24 text

A/Bςετͷ࢓૊Έ ༧ଌϞσϧͷྑ͠ѱ͠Λ A/B ςετ͢Δ࢓૊Έ͸ʢଟ෼)ඞਢ • ෳ਺ͷ༧ଌϞσϧΛϩʔυ • ೖࡳ࣌ʹϥϯμϜͰ༧ଌϞσϧΛબ୒ • ͲΕΛબ୒͔ͨ͠ɺIDΛϩάʹམͱ͢ • ͋ͱͰूܭͰ͖ΔΑ͏ʹ͢Δ 24

Slide 25

Slide 25 text

ෆ۩߹͕ग़ͦ͏ͳ৔ॴ 1. ֶश࣌: ਫ਼౓͕௿Լ͍ͯ͠ͳ͍͔ 2. ֶशϞσϧͷऔΓࠐΈ࣌ • ֶशଆͱ༧ଌଆͰϞσϧϑΝΠϧͷղऍ͕ҧ͏͔΋͠Εͳ͍ 3. ༧ଌ࣌: ༧ଌثʹೖྗΛਖ਼͘͠Ͱ͖Δ͔ 25

Slide 26

Slide 26 text

ෆ۩߹͕ग़ͦ͏ͳ৔ॴ 1. ֶश࣌: ਫ਼౓͕௿Լ͍ͯ͠ͳ͍͔ ← ֶश࣌ʹνΣοΫ 2. ֶशϞσϧͷऔΓࠐΈ࣌ ← औΓࠐΈ࣌ʹ੔߹ੑνΣοΫ • ֶशଆͱ༧ଌଆͰϞσϧϑΝΠϧͷղऍ͕ҧ͏͔΋͠Εͳ͍ 3. ༧ଌ࣌: ༧ଌثʹೖྗΛਖ਼͘͠Ͱ͖Δ͔ (← ୯ମςετ) 26

Slide 27

Slide 27 text

1. ֶश࣌: ༧ଌਫ਼౓νΣοΫ • ֶशํ๏Λ༻ҙͯ͠΋ɺ͕࣌ؒܦͭʹͭΕ؀ڥ͕มΘΓੑೳ͕ ௿Լ͢Δ͔΋͠Εͳ͍ɻ • ֶशσʔλͷҰ෦Λ࢖ͬͯ༧ଌਫ਼౓ΛνΣοΫ͢Δ ຖ೔ͷֶशόονͰ༧ଌਫ਼౓Λ֬ೝͰ͖ΔΑ͏ʹͳ͍ͬͯΔ 27

Slide 28

Slide 28 text

2. ϞσϧऔΓࠐΈ࣌: ੔߹ੑνΣοΫ • ֶशثͱ༧ଌث͕ผ࣮૷ʹͳͬͯ͠·ͬͨɻ ༧ଌ஋͕શ͘ಉ͜͡ͱΛ֬ೝ͢Δ • Ϟσϧֶश࣌ʹςετέʔεΛࣗಈੜ੒͢Δ • ֶशσʔλͷҰ෦Λ࢖ͬͯɺ ೖྗϕΫτϧͷ஋ͱɺظ଴͞ΕΔ༧ଌ஋Λฒ΂ͨcsvΛग़ྗ • ༧ଌϞσϧ̍ݸʹରͯ͠csv1ݸ 28

Slide 29

Slide 29 text

validation.csv ŘŸŖŢƄ hour, cpn_id, ad_size, domain, os, ..., expected 3, 123, 320x50, example.com, ios-7, ..., 0.0121 21, 100, 300x250, abc.com, android-4.4,..., 0.0093 12, 91, 300x250, example.com, android-4.3,..., 0.0013 ...(1000ߦ͘Β͍) • JSONΛೖࡳαʔόʔʹऔΓࠐΉࡍʹຖճνΣοΫ ࣦഊͨ͠ΒΞϥʔ τ • ೖࡳଆͰͷ༧ଌثͷ։ൃʹ΋໾ʹཱͬͨ • όϦσʔγϣϯ௨Δ·ͰscalaίʔυΛमਖ਼͢Ε͹Α͍ 29

Slide 30

Slide 30 text

ͨͱ͑͹ֶशϥΠϒϥϦͷΞοϓσʔτ࣌ • ಥવϞσϧऔΓࠐΈͷόϦσʔγϣϯ͕ࣦഊ͢ΔΑ͏ʹ • before: ༧ଌ஋ • after: ༧ଌ஋ • ֶशͰ࢖͏ύοέʔδ͕Կؾͳ͘ϚΠφʔΞοϓσʔτ͞Ε͍ͯͨ όϦσʔγϣϯʹΑͬͯେࢂࣄ͕๷͛ͨɻ 30

Slide 31

Slide 31 text

·ͱΊ • ػցֶशʹΑΔ༧ଌϞσϧΛͲ͏ಈ͔͍ͯ͠Δ͔ smalgoͰͷࣄྫ • ֶशͱ༧ଌΛ෼཭࣮ͨ͠૷ • ਫ਼౓΍੔߹ੑͷςετ 31