$30 off During Our Annual Pro Sale. View Details »

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

    View Slide

  2. © 2022 Treasure Data, Inc.
    自己紹介
    ● 青木峰郎(あおき みねろう)
    ● 元Rubyコミッター、著書多数→
    ● 前々職 並列RDBMSベンダー

    並列データベースと出会う
    ● 前職 クックパッド

    検索分析サービス「たべみる」の開発

    DWHの構築
    ● 現職 Treasure Data(3月から)

    Apps BE(Applications Backend)チーム
    にてCDPの開発

    View Slide

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

    View Slide

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

    View Slide

  5. © 2022 Treasure Data, Inc.
    CDPとは?

    View Slide

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

    View Slide

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

    View Slide

  8. © 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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  14. © 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人で担当しています

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  18. © 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
    ポイントカードマスター ウェブアクセスログ

    View Slide

  19. © 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回目

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  26. © 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
    この食い違いをどう解決するか?

    View Slide

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

    View Slide

  28. © 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
    動的に注入する

    View Slide

  29. © 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(悪)

    View Slide

  30. © 2022 Treasure Data, Inc.
    動的パラメーターの一部
    • クエリーエンジン

    データ量によってPresto / Hiveを切り替える
    • パーティション数

    これもデータ量によって変わる
    • カラム一覧

    実行のたびに変わる可能性があるため、つど取得する
    • クエリー

    Presto / Hive両対応の時点で不可避

    View Slide

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

    View Slide

  32. © 2022 Treasure Data, Inc.
    現代における解決策
    • 現在はワークフロー全体を動的に生成するhttp_call>オペレーターがDigdagに追
    加されており、これを使うとスマートに解決できる。

    すべてを動的に変え放題!

    評価タイミングのズレがなくなる!

    あらゆるお客さんが自動的に最新バージョン!

    最高!

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  36. © 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の構文を書くことに……

    View Slide

  37. © 2022 Treasure Data, Inc.
    Activation
    • セグメントはいろいろなシステムに転送して活用できる。

    メール

    プッシュ通知

    広告

    クーポンを出す

    などなど様々なコネクターがある。
    • ActivationはCDP最大の目的。CDPはActivationのためにある。

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  41. © 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(状態遷移)

    View Slide

  42. © 2022 Treasure Data, Inc.
    まとめ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide