Slide 1

Slide 1 text

σʔλΛத৺ͱ͢ΔWebαʔϏεͷ ։ൃɾӡ༻Λ࣮ݱ͢Δٕज़ ాத ঵ଠ࿠ (@yubessy) CAMPHOR x LIVESENSE WebαʔϏεͷ։ൃɾӡ༻ʹ͓͚ΔσʔλΤϯδχΞϦϯά

Slide 2

Slide 2 text

About me ాத ঵ଠ࿠ (@yubessy) ςΫϊϩδΧϧϚʔέςΟϯά෦ σʔλϓϥοτϑΥʔϜάϧʔϓ • 2010 - 2014 ژ౎େֶ޻ֶ෦৘ใֶՊ ܭࢉػՊֶίʔε • 2014 - 2016 ژ౎େֶେֶӃ৘ใֶݚڀՊ ࣾձ৘ใֶઐ߈ • 2016 - גࣜձࣾϦϒηϯε • σʔλ෼ੳج൫ Livesense Analytics ͷ։ൃɾӡ༻ • ػցֶशج൫ Livesense Brain ͷ։ൃɾӡ༻

Slide 3

Slide 3 text

Works • ࣄۀʹدΓఴ͏σʔλج൫ͷҭͯํ • ػցֶशγεςϜͷ৴པੑΤϯδχΞϦϯά • σʔλ෼ੳΛࢧ͑ΔʮศརΧϥϜʯͷ໰୊఺ͱͦͷղܾࡦ • Ϛϧνίϯςφߏ੒ʹΑΔػցֶशΞϧΰϦζϜͱΞϓϦέʔγϣϯͷૄ݁߹Խ • ػցֶशγεςϜͷӡ༻՝୊ͱίϯςφΦʔέετϨʔγϣϯ͕΋ͨΒ͢΋ͷ • Apache Sparkͷ3ͭͷAPI: RDD, DataFrame͔ΒDataset΁ • Facebookͷߴ଎ϕΫτϧܭࢉϥΠϒϥϦfaissΛϨίϝϯυAPIʹ࢖ͬͯΈΔ

Slide 4

Slide 4 text

ࠓ೔఻͍͑ͨ͜ͱ αʔϏε։ൃͰͳͥσʔλ͕ॏཁʁ αʔϏεͷσʔλ׆༻͸Ͳ͏͋Δ΂͖ʁ σʔλʹؔΘΔ࢓ࣄʹٻΊΒΕΔ͜ͱ͸ʁ

Slide 5

Slide 5 text

ͦͷલʹ

Slide 6

Slide 6 text

ͳΜͷͨΊʹαʔϏεΛͭ͘Δͷ͔ʁ

Slide 7

Slide 7 text

αʔϏεΛͭ͘Δཧ༝ Ϣʔβͷ໾ʹཱͬͯɺ͓ۚΛ΋Β͏

Slide 8

Slide 8 text

ϦϒηϯεͷαʔϏε͸ Ͳ͏΍ͬͯϢʔβͷ໾ʹཱ͍ͬͯΔʁ Ͳ͏΍͓ͬͯۚΛ΋Β͍ͬͯΔʁ

Slide 9

Slide 9 text

Ωʔϫʔυ : ੒Ռใुܕ

Slide 10

Slide 10 text

ͨͱ͑͹ : ϚοϋόΠτͷ͘͠Έ ܝࡌ՝ۚ (ଞࣾαʔϏε) 1. ΞϧόΠτΛޏ͍͍ͨ 2. ٻਓΛܝࡌ ← අ༻ൃੜ ࠾༻՝ۚ (ϚοϋόΠτ) 1. ΞϧόΠτΛޏ͍͍ͨ 2. ٻਓΛܝࡌ ← ແྉ 3. Ԡืऀ͕࠾༻͞Εͯॳग़ۈ ← අ༻ൃੜ

Slide 11

Slide 11 text

੒ޭใुܕ = αʔϏεͷར༻։࢝Ͱ͸ͳ͘໨తୡ੒ͷ࣌఺ͰใुΛ΋Β͏

Slide 12

Slide 12 text

੒ޭใुܕͷϝϦοτ ࠾༻͠ͳ͚Ε͹අ༻͸ൃੜ͠ͳ͍ = اۀͷ͓͕ۚແବʹͳΒͳ͍

Slide 13

Slide 13 text

σϝϦοτ͸ʁ

Slide 14

Slide 14 text

੒ޭใुܕͷσϝϦοτ ࠾༻͠ͳ͚Ε͹අ༻͸ൃੜ͠ͳ͍ = ܝࡌ͕Ϧϒηϯεͷച্ʹͳΒͳ͍

Slide 15

Slide 15 text

Ͳ͏͢Δʁ

Slide 16

Slide 16 text

Ϧϒηϯε͕΍Δ΂͖͜ͱ ܝࡌ͚ͩͰͳ͘Ԡืɾ࠾༻·Ͱ੒ޭͤ͞Δ = ϢʔβͱاۀΛ͏·͘Ϛονϯά͢Δ

Slide 17

Slide 17 text

Ͳ͏΍ͬͯʁ

Slide 18

Slide 18 text

Ϧϒηϯε͕஫ྗ͍ͯ͠Δ͜ͱ σʔλΛ׆༻͢Δ

Slide 19

Slide 19 text

఻͍͑ͨ͜ͱ1 αʔϏε։ൃͰͳͥσʔλ͕ॏཁʁ

Slide 20

Slide 20 text

σʔλͱฉ͍ͯɾɾɾ • Ϗοάσʔλ, ϦΞϧλΠϜσʔλ, .... • σʔλ෼ੳ, σʔλαΠΤϯε, .... • ਓ޻஌ೳ, ू߹஌, .... • ػցֶश, ࣗવݴޠॲཧ, ... • σΟʔϓϥʔχϯά, ... • Hadoop, Spark, ...

Slide 21

Slide 21 text

Ұ୴๨Ε͍ͯͩ͘͞

Slide 22

Slide 22 text

ͦ΋ͦ΋ WebαʔϏε͕ѻ͏σʔλͬͯʁ

Slide 23

Slide 23 text

WebαʔϏε͕ѻ͏σʔλ ίϯςϯπ : αʔϏε͕Ϣʔβʹఏڙ͢Δ৘ใ • ΞϧόΠτٻਓථ • ΞϧόΠτઌͷΫνίϛ Ϣʔβσʔλ : αʔϏε͕Ϣʔβ͔Βड͚औΔ৘ใ • ر๬৚݅ (৬छ, ۈ຿஍, ...ʣ • ݕࡧͷΩʔϫʔυ • ϖʔδͷΞΫηεϩά

Slide 24

Slide 24 text

Ϣʔβσʔλ͸Ͳ͏໾ཱͭʁ

Slide 25

Slide 25 text

Ϣʔβσʔλͷొ৔ ੲͷWeb : ϦϯΫΛͨͲͬͯࣗྗͰίϯςϯπʹͨͲΓண͘ • αΠτϚοϓɾϦϯΫू • Yahoo! σΟϨΫτϦݕࡧ Google ݕࡧͷొ৔ • ίϯςϯπʹϦϯΫΛషΕ͹ Google Bot ͕ΫϩʔϦϯά • Ϣʔβ͸΄͍͠৘ใΛ Google ʹݕࡧΩʔϫʔυͱͯ͠༩͑Δ

Slide 26

Slide 26 text

Ϣʔβσʔλ΁ͷ஫໨ Ϣʔβ͕༷ʑͳσʔλΛఏڙ͢ΔΑ͏ʹͳͬͨ • Google, Twitter, Instagram, LINE, ... σʔλ׆༻ͷͨΊͷٕज़͕ൃୡͨ͠ • େྔσʔλͷ஝ੵ : ෼ࢄॲཧ, Ϋϥ΢υ, ... • ༗༻ͳ৘ใͷநग़ : ػցֶश, ࣗવݴޠॲཧ, ... → ϢʔβσʔλΛར༻ͯ͠ίϯςϯπΛ͏·͘ಧ͚͍ͨ

Slide 27

Slide 27 text

ϦϒηϯεͰ͸Ͳ͏࢖͍ͬͯΔʁ

Slide 28

Slide 28 text

ͨͱ͑͹ Ձ஋ͷߴ͍ٻਓΛݟ͚ͭ΍͘͢͢Δ

Slide 29

Slide 29 text

(࠶ܝ) ϚοϋόΠτͷ͘͠Έ ܝࡌ՝ۚ (ଞࣾαʔϏε) 1. ΞϧόΠτΛޏ͍͍ͨ 2. ٻਓΛܝࡌ ← අ༻ൃੜ ࠾༻՝ۚ (ϚοϋόΠτ) 1. ΞϧόΠτΛޏ͍͍ͨ 2. ٻਓΛܝࡌ ← ແྉ 3. Ԡืऀ͕࠾༻͞Εͯॳग़ۈ ← අ༻ൃੜ

Slide 30

Slide 30 text

ʮՁ஋ͷߴ͍ٻਓʯͱ͸ʁ

Slide 31

Slide 31 text

Ϣʔβ : ࠾༻͞Ε΍͍͢ اۀ : Ԡื͞Ε΍͍͢ ϚοϋόΠτ : Ԡื & ࠾༻͞Ε΍͍͢

Slide 32

Slide 32 text

ʮՁ஋ͷߴ͍ٻਓʯΛͲ͏΍ͬͯ஌Δʁ

Slide 33

Slide 33 text

ʮՁ஋ͷߴ͍ٻਓʯͷࢦඪ Ԡื཰ɾ࠾༻཰

Slide 34

Slide 34 text

Ԡื཰ͱ࠾༻཰ Ԡื཰ = Ԡื਺ / Ӿཡ਺ ࠾༻཰ = ࠾༻਺ / Ԡื਺ ٻਓͷՁ஋ ∝ Ԡื཰ ✕ ࠾༻཰ • Ԡื཰͕ߴ͍ → Ϣʔβʹਓؾ͕͋Δ • ࠾༻཰͕ߴ͍ → اۀ͕ਓΛޏ͍͍ͨ

Slide 35

Slide 35 text

ӾཡɾԠื͕·ͩθϩͳΒʁ

Slide 36

Slide 36 text

৽ணٻਓͷԠื཰ɾ࠾༻཰͸ܭࢉͰ͖ͳ͍ → աڈσʔλ͔Βػցֶश

Slide 37

Slide 37 text

Ԡื཰ɾ࠾༻཰ͷ༧ଌ • ΞϧΰϦζϜ : ϩδεςΟοΫճؼ • ಛ௃ : ৬छ, ۈ຿஍, ళฮ਺, ٳ೔, γϑτ਺, ... • ڭࢣ : աڈͷଟ਺ͷٻਓͷӾཡɾԠืɾ࠾༻ ← Ϣʔβσʔλ (ߦಈϩά)

Slide 38

Slide 38 text

༧ଌͨ͠஋ΛͲ͏࢖͏ʁ → ݕࡧ݁ՌͷϥϯΩϯά

Slide 39

Slide 39 text

ݕࡧ݁ՌͷϥϯΩϯά 1. ϢʔβͷݕࡧΩʔϫʔυʹϚον͢ΔٻਓͷϦετΛऔಘ 2. ༧Ί༧ଌ͓͍ͯͨ͠Ԡื཰ɾ࠾༻཰ʹج͍ͮͯϦετΛฒͼସ͑ public void addDocs(TopFieldDocs mainDocs, int reSortDocsNum) throws JsenPageLimitExceedingException, JsenInvalidReSortUnitException { int sortUnitIndex = getIndexOf(dhondtUnit, mainDocs.fields); this.docCountTable = new DocCountTable(mainDocs.fields, reSortUnits, reSortDocsNum); java.util.ListIterator iter = fieldDocsIter(mainDocs.scoreDocs, reSortDocsNum); HashMap reSortedDocs = new HashMap(reSortDocsNum); while (iter.hasNext()) { FieldDoc doc = iter.next(); float score = ((Integer) (doc.fields[sortUnitIndex])).floatValue(); int count = docCountTable.getCountOf(doc); reSortedDocs.put(doc, score / (1 + count * dhondtCoef)); docCountTable.add(doc); } ArrayList> priorityList = new ArrayList<>(reSortedDocs.entrySet()); Collections.sort(priorityList, (obj1, obj2) -> obj2.getValue().compareTo(obj1.getValue())); this.allDocs = priorityList.stream().map(Entry::getKey).toArray(FieldDoc[]::new); }

Slide 40

Slide 40 text

Q. େม͡Όͳ͍ʁ

Slide 41

Slide 41 text

A. େมͰ͢

Slide 42

Slide 42 text

σʔλ׆༻ͷ೉͠͞ ͜ͷγεςϜ͸ൺֱత୯७ͳ෦ྨ ͦΕͰ΋େมͳ͜ͱ͸ͨ͘͞Μ͋Δ • ͲΜͳΞϧΰϦζϜɾಛ௃ΛબͿ͔ʁ • ӾཡɾԠืɾ࠾༻σʔλΛͲ͔͜ΒऔΔ͔ʁ • ༧ଌ஋ΛݕࡧγεςϜʹͲ͏औΓࠐΉ͔ʁ • ݕࡧ݁ՌͷιʔτͷܭࢉྔΛͲ͏ݮΒ͔͢ʁ • ͜Ε͕ຊ౰ʹϢʔβ΍اۀʹ໾ʹཱͭͷ͔ʁ

Slide 43

Slide 43 text

ͳΜͰ೉͍͠ͷʁ

Slide 44

Slide 44 text

σʔλ׆༻Λ೉͘͢͠ΔݪҼ γεςϜͷෆ࣮֬ੑ͕ߴ͍ ༷ʑͳઐ໳ੑ͕ඞཁʹͳΔ

Slide 45

Slide 45 text

γεςϜͷෆ࣮֬ੑ͕ߴ͍ ී௨ͷ৔߹ = σʔλ͕มΘͬͯ΋ϩδοΫ͸มΘΒͳ͍ • ϩδοΫ͸ίʔυ͚ͩͰܾ·Δ • ίʔυΛݟΕ͹ೖྗʹର͢Δग़ྗ͸Θ͔Δ ػցֶश = σʔλ͕มΘΔͱϩδοΫ͕มΘΔ • ಉ͡ίʔυͰ΋ֶशσʔλ͕ҧ͑͹ผͷϞσϧ • Ϟσϧͷύϥϝʔλ͸ਓ͕ؒཧղ͠ʹ͍͘

Slide 46

Slide 46 text

γεςϜͷෆ࣮֬ੑ͕ߴ͍ → αʔϏεΠϯ͢Δ·Ͱ݁Ռ͕ݟ͑ͳ͍

Slide 47

Slide 47 text

༷ʑͳઐ໳ੑ͕ඞཁʹͳΔ యܕతͳWeb։ൃ • αʔόαΠυ, ϑϩϯτ, Πϯϑϥ, ΞϓϦ σʔλΛ׆༻ͨ͠Web։ൃ • αʔόαΠυ, ϑϩϯτ, Πϯϑϥ, ΞϓϦ • ػցֶशΤϯδχΞ, σʔλΤϯδχΞ • ΞφϦετ, σʔλαΠΤϯςΟετ

Slide 48

Slide 48 text

༷ʑͳઐ໳ੑ͕ඞཁʹͳΔ → ਓࡐͷෆ଍ɾ։ൃίετͷ૿େ

Slide 49

Slide 49 text

Α͋͘Δࣦഊ

Slide 50

Slide 50 text

Ғ͍ਓ ʮਓ޻஌ೳͰ͍͍ײ͡ͷ੒ՌΛग़ͯ͘͠Εʯ

Slide 51

Slide 51 text

σʔλΤϯδχΞ (Λ೚͞Εͯ͠·ͬͨਓ) ʮΞΫηεϩά͸શ෦͋Γ·͢ʂʂʂʯ

Slide 52

Slide 52 text

ݱ࣮ ϑΝΠϧαʔόʹཷ·ͬͨ਺ສͷϑΝΠϧ /var/log/apache.log-2012-05-19.gz ͳ͓ɺ͋Δ೔͔ΒಥવϑΥʔϚοτ͕มΘΔ

Slide 53

Slide 53 text

σʔλαΠΤϯςΟετ (Λ೚͞Εͯ͠·ͬͨਓ) ʮ͜ͷΞϧΰϦζϜͰਫ਼౓͕100%ʹʂʂʂʯ

Slide 54

Slide 54 text

ݱ࣮ ֶशσʔλ͸40݅ ֶश΋ςετ΋ಉ͡σʔλ ௐ΂ͨΒܾఆ໦ΞϧΰϦζϜ͕աֶश͍ͯͨ͠

Slide 55

Slide 55 text

͜͏ͳΒͳ͍ͨΊʹ

Slide 56

Slide 56 text

఻͍͑ͨ͜ͱ2 αʔϏεͷσʔλ׆༻͸Ͳ͏͋Δ΂͖ʁ

Slide 57

Slide 57 text

ͦͷલʹ : େมͳΒ΍Βͳͯ͘Α͍ͷͰ͸ʁ

Slide 58

Slide 58 text

σʔλ׆༻͸େม͔ͩΒ΍Βͳͯ͘Α͍ʁ ৑ஊͰ͸ͳ͘ɺ͜Ε΋Ұͭͷཱ೿ͳબ୒ σʔλΛ࢖Θͳͯ͘΋αʔϏε͕͏·͍͘͘ͳΒͦΕͰ͍͍ σʔλ͕ແ͍ͷʹσΟʔϓϥʔχϯάͳͲʹखΛग़ͯ͠΋࢓ํͳ͍ ٯʹݴ͑͹ɺσʔλ׆༻Λ΍͍ͬͯ͘ʹ͸ͦΕͳΓͷ౒ྗ͕ඞཁ ͦΕͰ΋ɺσʔλ׆༻ͰαʔϏε͕ΑΓྑ͘ͳΔͳΒ΍Δ΂͖

Slide 59

Slide 59 text

ղܾ͢΂͖՝୊ ෆ࣮֬ੑΛ͏·͘ѻ͏ ઐ໳ੑΛ੒Ռʹͭͳ͛Δ

Slide 60

Slide 60 text

ෆ࣮֬ੑΛ͏·͘ѻ͏ʹ͸ʁ

Slide 61

Slide 61 text

ෆ࣮֬ੑΛ͏·͘ѻ͏ʹ͸ʁ → ҆શɾޮ཰తͳ։ൃͱݕূΛՄೳʹ

Slide 62

Slide 62 text

γεςϜͷෆ࣮֬ੑΛѻ͏ํ๏ ෆ࣮֬ੑ͸෭࡞༻Ͱ͸ͳ͘ɺຊ࣭తͰආ͚ΒΕͳ͍΋ͷ ෆ࣮֬ੑΛ཈੍͢ΔͷͰ͸ͳ͘ɺ্ख͘ѻ͑ΔΑ͏ʹ͢Δ • σʔλ͕มΘΔͱϞσϧ΋มΘΔ → ։ൃͰ΋ຊ൪ͱಉ͡σʔλΛ࢖͏ • σʔλநग़΍੔ܗʹख͕͔͔ؒΔ → σʔλͷ৔ॴͱલॲཧΛҰݩԽ → ͜ΕΛՄೳʹ͢Δσʔλ෼ੳج൫Λͭ͘Δ

Slide 63

Slide 63 text

Ϧϒηϯεͷσʔλ෼ੳج൫ ௨শ : Livsense Analytics • ϚοϋόΠτɾస৬ձٞɾస৬φϏͳͲɺ֤αʔϏεͷσʔλΛू໿ • ίϯςϯπ (ٻਓ৘ใ౳) ͱϢʔβσʔλ (ߦಈϩά౳) ͷ݁߹෼ੳΛՄೳʹ όοΫΤϯυ : Amazon Redshift • ෼ੳ༻్ʹಛԽͨ͠ྻࢤ޲ܕ෼ࢄσʔλ΢ΣΞϋ΢ε • ϨΠςϯγΑΓεϧʔϓοτΛॏࢹͨ͠ΫΤϦΤϯδϯ • 500+ ςʔϒϧ / 100ԯ+ Ϩίʔυ / 100+ ࣾ಺Ϣʔβ

Slide 64

Slide 64 text

Livesense Analytics ͷશ๴

Slide 65

Slide 65 text

೔ʑ౤͛ΒΕ͍ͯΔΫΤϦ SELECT DATE(n_cpl.pull_at) AS dt, CASE WHEN n_cpl.pull_condition_id = 47 THEN '1' WHEN n_cpl.pull_condition_id = 48 THEN '2' WHEN n_cpl.pull_condition_id = 49 THEN '3' ELSE 'other' END AS list, COUNT(DISTINCT n_c.id) AS contacts, COUNT(DISTINCT CASE WHEN service_start.contact_id IS NOT NULL THEN n_c.id ELSE NULL END) AS agreements, COUNT(DISTINCT CASE WHEN application_proxy.summarizable_id IS NOT NULL THEN n_c.id ELSE NULL END) AS agencies, COUNT(DISTINCT CASE WHEN cv.id IS NOT NULL THEN n_c.id ELSE NULL END) AS conversions FROM nkd.contact_pull_logs AS n_cpl INNER JOIN nkd.contacts AS n_c ON n_cpl.contact_id = n_c.id LEFT JOIN ( SELECT contact_id, staff_id, action_at FROM nkd.histories AS n_h INNER JOIN nkd.histories_history_actions AS n_hha ON n_h.id = n_hha.history_id WHERE n_hha.history_action_id = 1 AND n_h.history_result_id = 1 AND n_h.created_at >= '2017-12-19' ) AS service_start ON n_c.id = service_start.contact_id LEFT JOIN ( SELECT * FROM nkd.kpi_raw_data WHERE name = 'application_proxy' AND created_at >= '2017-12-19' ) AS application_proxy ON n_c.member_id = application_proxy.member_id LEFT JOIN ( SELECT id FROM nkd.applications WHERE recruit_state IN ('hire','pre_hire_confirm_admin') ) AS cv ON application_proxy.summarizable_id = cv.id WHERE n_cpl.pull_at >= '2017-12-19' GROUP BY dt, list ;

Slide 66

Slide 66 text

ઐ໳ੑΛ੒Ռʹͭͳ͛Δʹ͸ʁ

Slide 67

Slide 67 text

ઐ໳ੑΛ੒Ռʹͭͳ͛Δʹ͸ʁ → ٕज़બ୒ͷࣗ༝౓Λ޲্ͤ͞Δ

Slide 68

Slide 68 text

σʔλ׆༻ٕज़ͷଟ༷ੑ ՝୊ɾ໨తɾಘҙ෼໺ʹΑͬͯద͢Δٕज़͸ҟͳΔ ຊདྷ͸֤͕ࣗ100%ͷྗΛൃشͰ͖Δٕज़Λ࢖͍͍ͨ • Web։ൃ : Ruby etc. 㲗 σʔλ׆༻ : Python etc. • σʔλ׆༻Ͱ΋ R, Python, Julia ͳͲ͸Ұ௕Ұ୹ → ॊೈͳٕज़બ୒͕Ͱ͖Δ࣮ߦ؀ڥΛ੔උ͢Δ

Slide 69

Slide 69 text

Ϧϒηϯεͷػցֶशج൫ ௨শ : Livsense Brain • ༧ଌɾϨίϝϯυͳͲ֤αʔϏεͷػցֶशγεςϜΛ࣮ߦ • ؀ڥΛίϯςφԽ͠ɺ༷ʑͳγεςϜΛ؆୯ʹσϓϩΠ όοΫΤϯυ : Google Kubernetes Engine • ෳ਺ίϯςφͷ࣮ߦ΍ڠௐΛՄೳʹ͢ΔΦʔέετϨʔγϣϯαʔϏε • ҟͳΔγεςϜͰ΋ϦιʔεΛڞ༗ɾ༗ޮ׆༻ • 16+core CPU / 100+GB RAM / 15+छྨ ίϯςφ

Slide 70

Slide 70 text

Livesense Brain ͷશ๴

Slide 71

Slide 71 text

R / Shiny ʹΑΔޮՌ༧ଌWebΞϓϦ

Slide 72

Slide 72 text

Julia ʹΑΔϨίϝϯυΞϧΰϦζϜ࣮૷ function bpmf( users::Vector{Int}, items::Vector{Int}, rates::Vector{Float64}, N::Int, M::Int, D::Int, n_sample::Int) rateidx = sparse(users, items, 1:length(rates)) U = zeros(n_sample, N, D) V = zeros(n_sample, M, D) for t in 1:(n_sample-1) SS = (1. / N) * ΣXXt(U[t, :, :]) SU = (1. / N) * sum(U[t, :, :], 1)[:] W0ast = inv(inv(W0) + N * SS + (β0 * N) / (β0 + N) * (μ0 - SU) * (μ0 - SU)') λ_u = rand(Wishart(ν0 + N, symmetric(W0ast))) μ0ast = (β0 * μ0 + N * SU) / (β0 + N) μ_u = rand(MvNormal(μ0ast, symmetric(inv((β0 + N) * λ_u)))) ... for i in 1:N js = find(rateidx[i, :]) SV_i = ΣXXt(V[t, js, :]) λast_inv = inv(λ_u + α * SV_i) SVR_i = sum(V[t, js, :] .* rates[rateidx[i, js].nzval], 1)[:] μast = λast_inv * (α * SVR_i + λ_u * μ_u) U[t+1, i, :] = rand(MvNormal(μast, symmetric(λast_inv))) end ... end return U, V end

Slide 73

Slide 73 text

Q. ΍ͬͺΓେม͡Όͳ͍ʁ

Slide 74

Slide 74 text

A. ͦΕͳΓʹେมͰ͢

Slide 75

Slide 75 text

େม͚ͩͲɾɾɾ ϦϒηϯεͰ͸ɺ͜Ε·Ͱଟ͘ͷࢼߦࡨޡΛੵΈॏͶΔதͰ σʔλ׆༻ʹΑΓϢʔβʹ໾ཱͭαʔϏεΛ࡞ΕΔΑ͏ʹͳ͖ͬͯͨ ߴ͍ઐ໳ੑΛۦ࢖ͯ͠αʔϏεʹߩݙͰ͖Δਓࡐ΋ଟ͍͘Δ ҟͳΔઐ໳ੑΛ࣋ͬͨϝϯόʔ͕ڠྗͰ͖Δ͘͠ΈΛ࡞Γɺ ͦΕΛ׆͔ͯ͠αʔϏεΛΑΓྑ͍͖͍ͯͨ͘͠

Slide 76

Slide 76 text

ࠓ೔఻͍͑ͨ͜ͱ3 σʔλʹؔΘΔ࢓ࣄʹٻΊΒΕΔ͜ͱ͸ʁ

Slide 77

Slide 77 text

σʔλ׆༻ͱઐ໳ੑ σʔλʹؔΘΔઐ໳෼໺͸ඇৗʹͨ͘͞Μ͋Δ • ΞφϦετ, σʔλαΠΤϯςΟετ, Ϛʔέλʔ, ... • ػցֶशΤϯδχΞ, σʔλΤϯδχΞ, ... ʮ͜Ε͕Ͱ͖Ε͹શ෦Ͱ͖Δʯͱ͍ͬͨۜͷ஄ؙ͸ଘࡏ͠ͳ͍ • PythonͰػցֶश͚ͩͰ͖Ε͹OK → ❌ • RͰσʔλ෼ੳ͚ͩͰ͖Ε͹OK → ❌

Slide 78

Slide 78 text

Ͳ͏΍ͬͯઐ໳ੑΛ਎ʹ͚ͭΔʁ ͸ͨΒ͘ਓશһ͕৘ใܥग़਎Ͱ΋ͳ͍͠ɺ࠷ॳ͔ΒWebʹৄ͍͠Θ͚Ͱ΋ͳ͍ ͱ͸͍͑ɺ୭Ͱ΋ԿΒ͔ͷσʔλ΍ϩδοΫʹ৮ΕΔػձ͸ҙ֎ͱ͋Δ • ੜ෺ܥͷݚڀࣨͰɺ࣮ݧσʔλͷ౷ܭݕఆΛ͍ͯͨ͠ • લ৬͕ӦۀͰɺച্਺஋Λ΋ͱʹࢪࡦΛཱ͍ͯͯͨ • εϙʔπ׆ಈͰɺ૬खνʔϜͷઓྗ෼ੳΛ͍ͯͨ͠ → ԿΒ͔ͷ͖͔͚͔ͬΒσʔλʹڵຯΛ࣋ͭ

Slide 79

Slide 79 text

σʔλͱ͏·͘෇͖߹͏ʹ͸ʁ τϨϯυʹ૸Βͣɺ·ͣ͸ࣗ෼ͷ໨తͷͨΊʹσʔλΛͲ͏࢖͑Δ͔Λߟ͑Δ ͦͷ্Ͱɺࣗ෼ʹͰ͖ΔखஈΛߟ͑ͯࢼߦࡨޡ͢Δ • ࠓ͋Δσʔλ͔ΒɺͲΜͳ݁Ռ͕ಘΒΕΕ͹໨త͕ୡ੒Ͱ͖Δʁ • ͦͷͨΊʹ͸σʔλʹͲΜͳख๏΍ཧ࿦Λద༻͢Δʁ • ࠓ͋Δσʔλ͕ෆे෼ͳΒɺͲ͏΍Ε͹ิ͏͜ͱ͕Ͱ͖Δʁ ࠷ॳ͔Β͏·͍͘͘͜ͱ͸গͳ͍͕ɺ্ख͍͔͘ͳ͍ཧ༝Λߟ͑Δͷ͕େࣄ

Slide 80

Slide 80 text

σʔλʹؔΘΔ࢓ࣄʹͭ͘ʹ͸ʁ ࣮ࡍͷ࢓ࣄͰσʔλ͕Ͳ͏࢖ΘΕΔ͔஌Γ͍ͨ → Πϯλʔϯ΍ΞϧόΠτΛ׆༻͢Δ ΠϯλʔϯɾΞϧόΠτબͼͷϙΠϯτ • ֶੜ͚ͩͷϋοΧιϯͰ͸ͳ͘ɺ࣮຿ʹؔΘΕΔػձΛݟ͚ͭΔ • ʮ͜Ε͔Β΍͍͖͍ͬͯͨʯͰ͸ͳ͘ʮ͢Ͱʹ΍͍ͬͯΔʯձࣾΛݟ͚ͭΔ • σʔλʹؔΘΔͳΒɺαϙʔτ͢Δ࢓૊Έ͕੔͍ͬͯΔ͔Λฉ͍ͯΈΔ

Slide 81

Slide 81 text

͍͞͝ʹ

Slide 82

Slide 82 text

ࠓ೔ͷ࿩ʹڵຯΛ࣋ͬͯ΋Β͑ͨΒ…

Slide 83

Slide 83 text

αϚʔΠϯλʔϯ • ظؒ : Ԡ૬ஊ • ର৅ : ػցֶशɾσʔλ෼ੳɾαʔόαΠυ։ൃͷܦݧऀ • څ༩ : ࣌څ1200ԁʙ (ަ௨අࢧڅɾԕํͷ৔߹͸॓ധࢪઃख഑) • ಺༰ྫ : • ΫνίϛΛར༻ͨࣗ͠વݴޠॲཧʹΑΔ৽ػೳͷ։ൃ • Factorization Machine ͳͲͷΞϧΰϦζϜΛར༻ͨ͠Ϩίϝϯυ։ൃ • GCP্ͰͷABςετɾόϯσΟοτج൫ͷ։ൃ

Slide 84

Slide 84 text

Q & A