Slide 1

Slide 1 text

2022-11-29 30分でわかる! Treasure Data CDP 〜Applicationsチームプレゼンツ・おもしろ技術博覧会〜 Minero Aoki

Slide 2

Slide 2 text

© 2022 Treasure Data, Inc. 自己紹介 ● 青木峰郎(あおき みねろう) ● 元Rubyコミッター、著書多数→ ● 前々職 並列RDBMSベンダー ○ 並列データベースと出会う ● 前職 クックパッド ○ 検索分析サービス「たべみる」の開発 ○ DWHの構築 ● 現職 Treasure Data(3月から) ○ Apps BE(Applications Backend)チーム にてCDPの開発

Slide 3

Slide 3 text

© 2022 Treasure Data, Inc. 3 Agenda 1. CDPとは 2. Treasure Data CDPの概要 3. IDの統合 4. Parent Segmentの構築 5. 顧客セグメントの活用 6. Treasure Data CDPの最新機能

Slide 4

Slide 4 text

© 2022 Treasure Data, Inc. 4 1. CDPとは

Slide 5

Slide 5 text

© 2022 Treasure Data, Inc. CDPとは?

Slide 6

Slide 6 text

© 2022 Treasure Data, Inc. CDP: Customer Data Platformとは…… CDPは(1)統合された顧客データベースを持ち、( 2)他システムから利用することができます。定 義: https://www.cdpinstitute.org/learning-center/what-is-a-cdp/ 6 顧客データをマーケティングに 活用するためのシステムのこと

Slide 7

Slide 7 text

© 2022 Treasure Data, Inc. それってDWHやらDMPって やつらとは違うの?

Slide 8

Slide 8 text

© 2022 Treasure Data, Inc. CDPはアプリ+DB、DWHはデータ自体 • CDPはアプリケーション+データベースの全体 • DWH(Data Warehouse)は履歴データを収集し統合する という点ではCDPと非常に似ているが、アプリケーションは 含まない • CDPは顧客データに特化しているが、DWHは他のサブ ジェクト(例: 仕入れとか生産とか)も持つ app CDP DWH DWHの定義: https://en.wikipedia.org/wiki/Data_warehouse#Data_warehouse_characteristics

Slide 9

Slide 9 text

© 2022 Treasure Data, Inc. CDPとDMPの区別は難しい • CDPは主にマーケティングで使われる • DMPは広告領域で使われる • public DMPはanonymous userに主眼があり CDPはnamed userに主眼がある • private DMPはnamed userも持つので CDPと区別がつかない app CDP? DMP?

Slide 10

Slide 10 text

© 2022 Treasure Data, Inc. 10 2. Treasure Data CDPの概要

Slide 11

Slide 11 text

© 2022 Treasure Data, Inc. Treasure Data CDPは…… 11 顧客をセグメントに分割し、 セグメントごとに施策を打つシステム

Slide 12

Slide 12 text

© 2022 Treasure Data, Inc. Plazma Treasure Data CDPアーキテクチャの概要 fluentd バルク embulk Digdag ストリーム ジョブ起動 ID Unifi- cation Audience workflow Activation KVS RDB Appsチーム

Slide 13

Slide 13 text

© 2022 Treasure Data, Inc. Applications Backendチームの主要な担当領域 Audience Workflow ID統合済み テーブル Parent Segment 最適化・情報付与 セグメント計算・転送 各種システムへ…… Activation ID Unification (optional) ソース テーブル ID統合 ユーザー管理 CDP管理

Slide 14

Slide 14 text

© 2022 Treasure Data, Inc. Applications Backendチームの担当領域 領域 担当メンバー チームリーダー @spikeolaf 新機能1 @k_tsj, @hkdnet 新機能2 @chezou, @ganmacs, @dmikurube, iwabuchi 新機能3 @inohiro 新機能4 @uu59 CJO @Lewuathe ID Unification, Audience Workflow @mineroaoki 黒幕 @naruse 基本的に1機能1人で担当しています

Slide 15

Slide 15 text

© 2022 Treasure Data, Inc. 一人一殺 必殺仕事人が新機能を一人一殺で倒していくアットホームなチームです

Slide 16

Slide 16 text

© 2022 Treasure Data, Inc. 3. IDの統合: ID Unification

Slide 17

Slide 17 text

© 2022 Treasure Data, Inc. ID統合とは…… • 例: 実店舗のポイントカードのユーザー IDとウェブのユーザーID • 同じ人に対応するユーザーIDは1つになっていてほしいが、現実にはそうでないことが多い。 そこでIDをできるだけ1つにまとめる処理がID統合 • いわゆる「名寄せ」に近い 複数系列のユーザーIDなどを つないで1つのIDにすること

Slide 18

Slide 18 text

© 2022 Treasure Data, Inc. ID UnificationによるID統合 • TDのID Unificationはテーブルのリレーションシップだけを元に統合する • 曖昧性のある統合はサポートしていない • 例: 住所と電話番号とメアドのうち2つが一致していたら統合 id card_id cookie_id 3533895 984676 2353466 3544896 984677 1216623 3544896 984679 6325606 cookie_id web_user_id 2201857 15320509 1216623 15320510 4425606 15320511 ポイントカードマスター ウェブアクセスログ

Slide 19

Slide 19 text

© 2022 Treasure Data, Inc. ID UnificationのID統合アルゴリズム(超簡略版) 1. IDカラムだけをすべて抜き出す 2. リレーションシップを元に、関連付けられたキーをグループにしていく 3. グループ化が収束するまで2を繰り返す card_id cookie_id 984676 2353466 984677 1216623 984679 6325606 cookie_id web_user_id 2201857 15320509 1216623 15320510 4425606 15320511 web_user_id cmpn_cid 15320509 5320577 15320510 5320578 15320511 5320579 1回目 2回目

Slide 20

Slide 20 text

© 2022 Treasure Data, Inc. (SQLで) 計算が収束するまで 繰り返す……だと……?

Slide 21

Slide 21 text

© 2022 Treasure Data, Inc. ID UnificationのDigdagワークフロー(抜粋) +unify_loop: loop>: <%= マージ回数 %> _do: +iteration: td>: query: IDグループ化クエリー 確かになんかループしている ……

Slide 22

Slide 22 text

© 2022 Treasure Data, Inc. 4. Parent Segmentの構築: Audience Workflow

Slide 23

Slide 23 text

© 2022 Treasure Data, Inc. Audience Workflowの機能 機能 効果 Parent Segmentのビルド セグメント計算に最適化したテーブルを構築する 地域コード付与 IPアドレスから国や地域を特定し、そのコードを付与する テキスト特徴量付与 訪問したウェブページの特徴を抽出して付与する Predictive Scoring 機械学習を使って計算したスコアを付与する

Slide 24

Slide 24 text

© 2022 Treasure Data, Inc. 何のための最適化? Audience Workflow ソース テーブル Parent Segment Activation 最適化・情報付与 セグメント計算 各種シス テムへ…… バッチ つど計算 セグメントはコンソール操作や Activationのたびにその場で計算されるので、 それなりのレイテンシで完了するように最適化しなければならない

Slide 25

Slide 25 text

© 2022 Treasure Data, Inc. アカウントごとに環境はまったく異なる (1)データ量 a, b, c (2)テーブル定義 x,y,z,m,n,p,. (3)偏り → すべてに対応するには動的な仕組みが必要

Slide 26

Slide 26 text

© 2022 Treasure Data, Inc. Digdagワークフローは基本的に静的 Digdagサーバーに事前に登録したワークフローがスケジュール起動される Digdag timezone: UTC schedule: daily>: 06:00:00 +create_database: td_ddl>: create_databases: [${matrix_database_name}] _retry: 5 +create_table_customers: td>: create_empty_table.sql engine: 'presto' table_name: ${matrix_customers_tmp_table_name} _retry: 5 +customers: td>:customers.sql engine: hive insert_into: ${matrix_customers_tmp_table_name} _retry: 5 …… Plazma SQL SQL SQL スケジュール 起動 xxxx.dig この食い違いをどう解決するか?

Slide 27

Slide 27 text

© 2022 Treasure Data, Inc. ワークフローの一部だけが 外部から読み込まれる

Slide 28

Slide 28 text

© 2022 Treasure Data, Inc. 『静的』だけど『静的』じゃない それがAudience Workflowレクイエム ワークフローの冒頭で APIサーバーから動的パラメーターを読み込んで注入する Digdag timezone: UTC schedule: daily>: 06:00:00 +create_database: td_ddl>: create_databases: [${matrix_database_name}] _retry: 5 +create_table_customers: td>: create_empty_table.sql engine: 'presto' table_name: ${matrix_customers_tmp_table_name} _retry: 5 +customers: td>:customers.sql engine: hive insert_into: ${matrix_customers_tmp_table_name} _retry: 5 …… Plazma SQL SQL SQL スケジュール 起動 audience.dig CDP-API 動的に注入する

Slide 29

Slide 29 text

© 2022 Treasure Data, Inc. Audience WorkflowのDigdagワークフロー(抜粋) +get_queries: http>: <%= escape_yaml_literal @queries_uri %> headers: 略 store_content: true +customers: td>: query: ${JSON.parse(http.last_content)["customers"]} engine: ${JSON.parse(http.last_content)["customers_engine"]} insert_into: <%= escape_yaml_literal @matrix_customers_tmp_table_name %> <%- if @special_behavior_workflow -%> +behaviors: for_each>: behavior_workflow_name: <%= escape_yaml_literal @behavior_workflow_names %> _do: +run_behavior_workflow: require>: ${behavior_workflow_name} <%- else -%> +behaviors: for_each>: behavior: ${Object.keys(JSON.parse(http.last_content)["behaviors"])} _do: CDP-APIを呼んで動的パラメーターを取得 動的なパラメーターの埋め込み これは静的な分岐 静的なパラメーター また動的なパラメーター (静的パラメーターからの派生値なので)これも静的 セグメント作成時、ワークフロー起動時、ワークフロー実行中に 評価タイミングがバラまかれている酷いワークフロー ぼくと契約して動的 ワークフローになってよ! CDP-API(悪)

Slide 30

Slide 30 text

© 2022 Treasure Data, Inc. 動的パラメーターの一部 • クエリーエンジン • データ量によってPresto / Hiveを切り替える • パーティション数 • これもデータ量によって変わる • カラム一覧 • 実行のたびに変わる可能性があるため、つど取得する • クエリー • Presto / Hive両対応の時点で不可避

Slide 31

Slide 31 text

© 2022 Treasure Data, Inc. かわいいワークフローと思った? 残念! 悪クフローちゃんでした! ワークフローとAPIの 双方にバージョンがあります

Slide 32

Slide 32 text

© 2022 Treasure Data, Inc. 現代における解決策 • 現在はワークフロー全体を動的に生成するhttp_call>オペレーターがDigdagに追 加されており、これを使うとスマートに解決できる。 • すべてを動的に変え放題! • 評価タイミングのズレがなくなる! • あらゆるお客さんが自動的に最新バージョン! • 最高!

Slide 33

Slide 33 text

© 2022 Treasure Data, Inc. 5. 顧客セグメントの活用: ActivationとCDP KVS

Slide 34

Slide 34 text

© 2022 Treasure Data, Inc. セグメントの計算 セグメントの構築条件はIonという形式で表現されており、 それをSQLにコンパイルして実行する。 Ion SQL Plazma コンパイル 出力 TDウェブ コンソール クエリー

Slide 35

Slide 35 text

© 2022 Treasure Data, Inc. Ionとは…… SQLの条件節のASTを JSONで表現したもの

Slide 36

Slide 36 text

© 2022 Treasure Data, Inc. IonはSQLの構文木(AST)そのもの { type: “And”, conditions: [ { type: “Value”, left_value: { database: “cdp_audience_1”, table: “customers”, column: “country_id” }, operator: { type: “Equal”, not: false, right_value: “Japan” } }, { type: “Value”, left_value: { name: “age” }, operator: { type: “Equal”, not: false, right_value: 36 } ] } And country_id = ‘Japan’ age = 36 対応するSQLのAST Ion 余談: IonはCDP-APIのリクエストパラメーターなの で、OpenAPIでSQLの構文を書くことに……

Slide 37

Slide 37 text

© 2022 Treasure Data, Inc. Activation • セグメントはいろいろなシステムに転送して活用できる。 • メール • プッシュ通知 • 広告 • クーポンを出す • などなど様々なコネクターがある。 • ActivationはCDP最大の目的。CDPはActivationのためにある。

Slide 38

Slide 38 text

© 2022 Treasure Data, Inc. リアルタイムアクセスを実現するCDP KVS • セグメントはPostgreSQL / DynamoDBに書き込んで、オンラインアプリケーション からAPI経由でアクセスすることが可能。 Plazma CDP KVS バッチ転送 Ignite Dynamo DB lookup APIアクセス

Slide 39

Slide 39 text

© 2022 Treasure Data, Inc. 6. CDPの最新機能

Slide 40

Slide 40 text

© 2022 Treasure Data, Inc. CJO: Customer Journey Orchestration 「店舗に3回以上来店したらロイヤルカスタマーに昇格」のような 複雑な状態遷移(いわゆるカスタマージャーニー)を顧客ごとに保持し、 状態に対応するセグメントを作ることができる

Slide 41

Slide 41 text

© 2022 Treasure Data, Inc. CJOの内部実装 超巨大な横長テーブルにカラムとして全ステートを並べて、行を更新することで状態遷移を表現する customer_id st_1 st_2 st_3 st_4 st_5 st_6 st_7 st_8 st_9 …… aaaaaaaaa ◯ bbbbbbbbb ◯ cccccccccc ◯ ddddddddd ◯ ◯ eeeeeeeee ◯ fffffffffffff ◯ ggggggggg ◯ UPDATE(状態遷移)

Slide 42

Slide 42 text

© 2022 Treasure Data, Inc. まとめ

Slide 43

Slide 43 text

© 2022 Treasure Data, Inc. まとめ 1. CDPは顧客データをマーケティングに活用するた めのプラットフォーム 2. TD CDPは顧客のセグメントを作って様々な施策 を行うことができる 3. TD CDPはまだまだ新機能を開発中です 4. ……

Slide 44

Slide 44 text

© 2022 Treasure Data, Inc. 4. We are hiring! > https://www.treasuredata.com/company/careers/

Slide 45

Slide 45 text

© 2022 Treasure Data, Inc. 45 ご清聴ありがとうございました