Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Treasure Data TechTalk 2022 - TD CDP in 30 minutes

Minero Aoki
November 29, 2022

Treasure Data TechTalk 2022 - TD CDP in 30 minutes

Treasure Data TechTalk 2022で発表した「30分でわかるTreasure Data CDP」のスライドです。

Minero Aoki

November 29, 2022
Tweet

More Decks by Minero Aoki

Other Decks in Technology

Transcript

  1. © 2022 Treasure Data, Inc. 自己紹介 • 青木峰郎(あおき みねろう) •

    元Rubyコミッター、著書多数→ • 前々職 並列RDBMSベンダー ◦ 並列データベースと出会う • 前職 クックパッド ◦ 検索分析サービス「たべみる」の開発 ◦ DWHの構築 • 現職 Treasure Data(3月から) ◦ Apps BE(Applications Backend)チーム にてCDPの開発
  2. © 2022 Treasure Data, Inc. 3 Agenda 1. CDPとは 2.

    Treasure Data CDPの概要 3. IDの統合 4. Parent Segmentの構築 5. 顧客セグメントの活用 6. Treasure Data CDPの最新機能
  3. © 2022 Treasure Data, Inc. CDP: Customer Data Platformとは…… CDPは(1)統合された顧客データベースを持ち、(

    2)他システムから利用することができます。定 義: https://www.cdpinstitute.org/learning-center/what-is-a-cdp/ 6 顧客データをマーケティングに 活用するためのシステムのこと
  4. © 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
  5. © 2022 Treasure Data, Inc. CDPとDMPの区別は難しい • CDPは主にマーケティングで使われる • DMPは広告領域で使われる

    • public DMPはanonymous userに主眼があり CDPはnamed userに主眼がある • private DMPはnamed userも持つので CDPと区別がつかない app CDP? DMP?
  6. © 2022 Treasure Data, Inc. Plazma Treasure Data CDPアーキテクチャの概要 fluentd

    バルク embulk Digdag ストリーム ジョブ起動 ID Unifi- cation Audience workflow Activation KVS RDB Appsチーム
  7. © 2022 Treasure Data, Inc. Applications Backendチームの主要な担当領域 Audience Workflow ID統合済み

    テーブル Parent Segment 最適化・情報付与 セグメント計算・転送 各種システムへ…… Activation ID Unification (optional) ソース テーブル ID統合 ユーザー管理 CDP管理
  8. © 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人で担当しています
  9. © 2022 Treasure Data, Inc. ID統合とは…… • 例: 実店舗のポイントカードのユーザー IDとウェブのユーザーID

    • 同じ人に対応するユーザーIDは1つになっていてほしいが、現実にはそうでないことが多い。 そこでIDをできるだけ1つにまとめる処理がID統合 • いわゆる「名寄せ」に近い 複数系列のユーザーIDなどを つないで1つのIDにすること
  10. © 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 ポイントカードマスター ウェブアクセスログ
  11. © 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回目
  12. © 2022 Treasure Data, Inc. ID UnificationのDigdagワークフロー(抜粋) +unify_loop: loop>: <%=

    マージ回数 %> _do: +iteration: td>: query: IDグループ化クエリー 確かになんかループしている ……
  13. © 2022 Treasure Data, Inc. Audience Workflowの機能 機能 効果 Parent

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

    Parent Segment Activation 最適化・情報付与 セグメント計算 各種シス テムへ…… バッチ つど計算 セグメントはコンソール操作や Activationのたびにその場で計算されるので、 それなりのレイテンシで完了するように最適化しなければならない
  15. © 2022 Treasure Data, Inc. アカウントごとに環境はまったく異なる (1)データ量 a, b, c

    (2)テーブル定義 x,y,z,m,n,p,. (3)偏り → すべてに対応するには動的な仕組みが必要
  16. © 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 この食い違いをどう解決するか?
  17. © 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 動的に注入する
  18. © 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(悪)
  19. © 2022 Treasure Data, Inc. 動的パラメーターの一部 • クエリーエンジン • データ量によってPresto

    / Hiveを切り替える • パーティション数 • これもデータ量によって変わる • カラム一覧 • 実行のたびに変わる可能性があるため、つど取得する • クエリー • Presto / Hive両対応の時点で不可避
  20. © 2022 Treasure Data, Inc. 現代における解決策 • 現在はワークフロー全体を動的に生成するhttp_call>オペレーターがDigdagに追 加されており、これを使うとスマートに解決できる。 •

    すべてを動的に変え放題! • 評価タイミングのズレがなくなる! • あらゆるお客さんが自動的に最新バージョン! • 最高!
  21. © 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の構文を書くことに……
  22. © 2022 Treasure Data, Inc. Activation • セグメントはいろいろなシステムに転送して活用できる。 • メール

    • プッシュ通知 • 広告 • クーポンを出す • などなど様々なコネクターがある。 • ActivationはCDP最大の目的。CDPはActivationのためにある。
  23. © 2022 Treasure Data, Inc. リアルタイムアクセスを実現するCDP KVS • セグメントはPostgreSQL /

    DynamoDBに書き込んで、オンラインアプリケーション からAPI経由でアクセスすることが可能。 Plazma CDP KVS バッチ転送 Ignite Dynamo DB lookup APIアクセス
  24. © 2022 Treasure Data, Inc. CJO: Customer Journey Orchestration 「店舗に3回以上来店したらロイヤルカスタマーに昇格」のような

    複雑な状態遷移(いわゆるカスタマージャーニー)を顧客ごとに保持し、 状態に対応するセグメントを作ることができる
  25. © 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(状態遷移)
  26. © 2022 Treasure Data, Inc. まとめ 1. CDPは顧客データをマーケティングに活用するた めのプラットフォーム 2.

    TD CDPは顧客のセグメントを作って様々な施策 を行うことができる 3. TD CDPはまだまだ新機能を開発中です 4. ……
  27. © 2022 Treasure Data, Inc. 4. We are hiring! >

    https://www.treasuredata.com/company/careers/