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

gokart をどこでどのように 使っているか? / In what situations S...

gokart をどこでどのように 使っているか? / In what situations Sansan uses gokart

■イベント :【Sansan×エムスリー】gokartで爆速開発!MLOps勉強会
https://sansan.connpass.com/event/288525/

■登壇概要
タイトル:gokart をどこでどのように 使っているか?
発表者: 技術本部 研究開発部 研究員 小松 尚太

◉ 研究開発職 採用情報
募集中のポジションや関連記事など
https://media.sansan-engineering.com/

◉ Sansan Tech Blog
Sansanのものづくりを支えるメンバーのテックブログ(R&Dメンバーの連載も多数)

https://buildersbox.corp-sansan.com/

Sansan R&D

July 12, 2023
Tweet

More Decks by Sansan R&D

Other Decks in Technology

Transcript

  1. 写真が入ります ⼩松 尚太 Sansan株式会社 技術本部 研究開発部 SocSciグループ 研究員 - 農学修士

    - 2020年5月入社 - 前職はコートジボワールにある国際農業研究機関 - データを活用した課題解決に従事
  2. - Sansan Labs - 社内向け application suite「In-house Solutions」 - A/B

    Test これらすべてで gokart を利⽤している。 ミッション実現のために何をしているか?
  3. 解決策 - ユーザーからのフィードバックやインタビューを通して 課題を特定 - リードタイム1ヶ月程度で高速にリリースできる開発体制 - リリース後もフィードバックを受けて機能改善 結果 -

    2022/7~12で10個の新機能をリリース - 営業生産性の向上に貢献 Sansan Labs 営業DXサービス「Sansan」において、データドリブン に営業のターゲティングやアプローチ⽅法を実現する ビジネス課題 営業ポテンシャル分析 業界ニュースランキング 営業アクティビティレポート 役職者接点カバー率 訪問ルートメーカー 類似企業検索 企業パフォーマンス検索 企業リレーションスコア
  4. - 社内の課題を高速で解決するために、Sansan Labs のテンプレートをベ ースに誕生 - 社内課題の例 - 顧客のセグメントをいろんなカットで見られると嬉しい -

    問い合わせ対応を自動化したい - 利用状況のレポートを簡単に作成できるようにしたい - 荷電のメモ作成を自動化したい - … In-house Solutions
  5. 解決策 A/B テストで複数の訴求メッセージの中から 効果的なものを特定 結果 - 目標値を上回る利用実績を実現 - 利用訴求メッセージの違いを定量的に判断でき、 カスタマーサクセスのメッセージ作成にも

    知見が蓄積された モバイルアプリ内での効果的な利⽤訴求メッセージの特定 商談前に、つながりを検索。 相⼿と同僚との接点を確認しよう スマホで⼈脈をサクサク検索。 商談相⼿とのつながりを事前に把 握しよう A案 B案 Sansanモバイルアプリ上で 特定の機能を使⽤したことがないユーザーに対し、 効果的に利⽤促進するメッセージを特定する ビジネス課題
  6. テンプレートからプロジェクトを作成 - Cookiecutter を使ってプロジェクトを作成 - batch にて gokart を使用し、データ取得・加工・アップロードを行う .

    ├── app ... frontend code base ├── batch ... batch code base ├── .env.example ├── mypy.ini ├── compose.yaml └── README.md
  7. . └── batch ├── conf │ ├── logging.ini │ └──

    param.ini ... parameters for batch pipelines └── pipeline ├── schemas │ ├── data_schema.py ... pandas schemas │ └── __init__.py └── tasks ├── data_loader.py ... load data from public clouds ├── data_handler.py ... handle data ├── data_uploader.py ... upload data ├── __init__.py └── main_task.py ... main task batch のディレクトリ構造の⼀部 - tasks 以下に gokart task を定義していく - data_loader, data_handler, data_uploader で定義した task を、main_task で実行す る。
  8. task の例 class SliceDataTask(GokartTask): """ データを上から100行までスライスするタスク """ raw_data_task = gokart.TaskInstanceParameter()

    def run(self) -> None: df = self.load_data_frame() processed_df = self.run_imp(df) self.dump(processed_df) @classmethod @pa.check_types def run_imp( cls, df: DataFrame[data_schema.RawDataOutputSchema] ) -> DataFrame[data_schema.SliceDataOutputSchema]: return df.head(100)
  9. - JSON ファイルに A/B テストの設定を 記述 - JSONファイルのパスをパラメータとし てタスクに渡す -

    JSON ファイルごとにデータ処理タス クが走り、最後にデータが統合される A/B Testの実⾏ { "promoted_feature_name": "xxxxx", "query_path": "./sql/hoge.sql", "begin_date": "2023-02-01", "abtest": { "enabled": true, "uuid": "xxxxx", "description": "hogehoge", "sample_size_per_variant": 2000, "variants": [ { "group_name": "A", "description": "Plan A", "content_id": "xxxxx" }, { "group_name": "B", "description": "Plan B", "content_id": "xxxxx" }, { "group_name": "C", "description": "Control Group", "content_id": null } ] } }