Slide 1

Slide 1 text

Sansan株式会社 部署 名前 gokart をどこでどのように 使っているか? Sansan技術本部 Sansan技術本部 研究開発部 小松 尚太

Slide 2

Slide 2 text

写真が入ります ⼩松 尚太 Sansan株式会社 技術本部 研究開発部 SocSciグループ 研究員 - 農学修士 - 2020年5月入社 - 前職はコートジボワールにある国際農業研究機関 - データを活用した課題解決に従事

Slide 3

Slide 3 text

gokart を活⽤して、データを⽤いた課題解決を⾏っている話をします。 - どこで使っているか? - どうやって使っているか? お話すること 2

Slide 4

Slide 4 text

何をしているか?

Slide 5

Slide 5 text

私たちのチームは以下のミッションを掲げている。 - 営業を強くするDXサービスの付加価値を高める - データドリブンな意思決定でプロダクトのグロースをリードする - データ活用で社内/プロダクトの課題を解決する 何を実現したいか?

Slide 6

Slide 6 text

- Sansan Labs - 社内向け application suite「In-house Solutions」 - A/B Test これらすべてで gokart を利⽤している。 ミッション実現のために何をしているか?

Slide 7

Slide 7 text

Sansan Labs

Slide 8

Slide 8 text

解決策 - ユーザーからのフィードバックやインタビューを通して 課題を特定 - リードタイム1ヶ月程度で高速にリリースできる開発体制 - リリース後もフィードバックを受けて機能改善 結果 - 2022/7~12で10個の新機能をリリース - 営業生産性の向上に貢献 Sansan Labs 営業DXサービス「Sansan」において、データドリブン に営業のターゲティングやアプローチ⽅法を実現する ビジネス課題 営業ポテンシャル分析 業界ニュースランキング 営業アクティビティレポート 役職者接点カバー率 訪問ルートメーカー 類似企業検索 企業パフォーマンス検索 企業リレーションスコア

Slide 9

Slide 9 text

社内向け application suite 「In-house Solutions」

Slide 10

Slide 10 text

- 社内の課題を高速で解決するために、Sansan Labs のテンプレートをベ ースに誕生 - 社内課題の例 - 顧客のセグメントをいろんなカットで見られると嬉しい - 問い合わせ対応を自動化したい - 利用状況のレポートを簡単に作成できるようにしたい - 荷電のメモ作成を自動化したい - … In-house Solutions

Slide 11

Slide 11 text

例: 利⽤状況レポートの⾃動化で業務⽀援 ※レポートイメージ

Slide 12

Slide 12 text

A/B Test

Slide 13

Slide 13 text

解決策 A/B テストで複数の訴求メッセージの中から 効果的なものを特定 結果 - 目標値を上回る利用実績を実現 - 利用訴求メッセージの違いを定量的に判断でき、 カスタマーサクセスのメッセージ作成にも 知見が蓄積された モバイルアプリ内での効果的な利⽤訴求メッセージの特定 商談前に、つながりを検索。 相⼿と同僚との接点を確認しよう スマホで⼈脈をサクサク検索。 商談相⼿とのつながりを事前に把 握しよう A案 B案 Sansanモバイルアプリ上で 特定の機能を使⽤したことがないユーザーに対し、 効果的に利⽤促進するメッセージを特定する ビジネス課題

Slide 14

Slide 14 text

なぜ gokart を使うか?

Slide 15

Slide 15 text

きっかけ 将来、他のフレームワークを使うことになる可能性もあるが、 「フレームワークに載っているものを別のフレームワークに移す」ことは、 「何もフレームワークに載っていないものをフレームワークに載せる」こと よりも格段に容易

Slide 16

Slide 16 text

- 開発や運用の属人性を排除 - batch のベースを gokart に統一することで、ノウハウの蓄積が進む - 開発リードタイムの削減 - 高速な実装が可能になりつつある gokart に統⼀することの効果

Slide 17

Slide 17 text

Sansan Labs の開発のリードタイムは半分になった → さらに半分にする リードタイム:最も古い Pull Request の作成日から、最新の Pull Request がマージされた日までの日数 平均 66.3日 平均 35.3⽇

Slide 18

Slide 18 text

どうやって gokart を使っているか?

Slide 19

Slide 19 text

テンプレートからプロジェクトを作成 - Cookiecutter を使ってプロジェクトを作成 - batch にて gokart を使用し、データ取得・加工・アップロードを行う . ├── app ... frontend code base ├── batch ... batch code base ├── .env.example ├── mypy.ini ├── compose.yaml └── README.md

Slide 20

Slide 20 text

. └── 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 で実行す る。

Slide 21

Slide 21 text

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)

Slide 22

Slide 22 text

- 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 } ] } }

Slide 23

Slide 23 text

- 課題解決を素早く行うために gokart に統一して活用している。 - オーソドックスに gokart を使っていると思うが、さらに活用すべき機能 があるかもしれない。 終わりに

Slide 24

Slide 24 text

No content