Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
こんなデータマートは嫌だ。どんな? / waiwai-data-meetup-202504
Search
Shun Takagiwa
April 10, 2025
Technology
3.6k
7
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
こんなデータマートは嫌だ。どんな? / waiwai-data-meetup-202504
Shun Takagiwa
April 10, 2025
More Decks by Shun Takagiwa
See All by Shun Takagiwa
LayerXの企業文化をデータがもっと強くする
shuntak
2
2.3k
たまたま出会った情熱を深掘りするキャリア戦略 〜ワクワクする働き方を探して〜
shuntak
3
2.6k
バクラクのデータドリブンな事業運営・爆速開発を支えるデータ分析基盤のこれまで・現在・これから
shuntak
1
9.3k
リリースから2年。爆速開発を支えるバクラクの組織とアーキテクチャ / AWS Dev Day 2022 Japan
shuntak
0
7.7k
バクラクのOCRで注目する指標について 〜精度の定義は一つじゃない〜 / Bakuraku OCR Metrics
shuntak
0
4.3k
LayerXインボイスのAI-OCRを支える非同期処理アーキテクチャ / AWS Dev Day Online Japan 2021
shuntak
0
8k
Introduction to Cordage v0.2 - Quorum Meetup Online
shuntak
0
110
Introduction to Cordage v0.2 (日本語) - blockchain.tokyo Online #3
shuntak
0
94
Dive Deep into Quorum - blockchain.tokyo #22
shuntak
0
720
Other Decks in Technology
See All in Technology
Claude Codeとハーネスについて考えてみる
oikon48
18
8.6k
SRE Lounge Hiroshimaへの招待
grimoh
0
290
Why is RC4 still being used?
tamaiyutaro
0
300
プライバシー保護の理論と実践
lycorptech_jp
PRO
1
240
『AIに負けない』より『AIと遊ぶ』」〜ワクワクが最強のテスト・QA学習戦略_公開用
odan611
1
450
Zoom2Youtube.Claude
kawaguti
PRO
2
440
初めてのDatabricks勉強会
taka_aki
2
240
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
0
560
トークン最適化のためのユーザーストーリー分析 / User Story Analysis for Token Optimization
oomatomo
0
170
LiDAR SLAMの実装とセンサ融合 ~Lie群からContinuous-Time LIOまで~
naokiakai
1
980
事業価値を⽣み出すSREへ SREが担うべき意思決定の5層
kenta_hi
1
540
SRE歴2ヶ月でも開発6年の知見を活かして、チームで止まっていた環境改善を前に進めた話
a_ono
1
210
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
960
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
410
So, you think you're a good person
axbom
PRO
2
2.1k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
How to Talk to Developers About Accessibility
jct
2
280
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
260
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
890
How to Ace a Technical Interview
jacobian
281
24k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.5k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
410
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Transcript
こんなデータマートは嫌だ。どんな? わいわいデータミートアップ 2025-04-10 高際 隼 @shun_tak
高際 隼 / Shun Takagiwa 株式会社LayerX アナリティクスエンジニア ▸ 2020年〜現在 -
バクラク事業を立ち上げ、AI-OCRの初期バージョンを開発 - 機械学習とデータ関連組織の立ち上げ、マネジメント - データ活用の推進に注力 (今) ▸ 2018〜2020年 - 株式会社LayerX 立ち上げ - ブロックチェーン事業 PM・TechLead 最近は Cline でのデータマート作りに挑戦中 結構いい感じになってきたかも 自己紹介 © LayerX Inc. 2
こんなデータマートは嫌だ。 どんな?
ドキュメントがない ▸ 誰が何のために作ったデータマートか分からない ▸ カラムの意味や、主キー (PK)・外部キー (FK) も不明瞭 ▸ でも意外と使われてる
▸ 「数字がズレてるんですけど」を直せない © LayerX Inc. 4
まじでドキュメント書こう ▸ シンプルでいいので書いてほしいものリスト - 目的・用途 - 想定する主な利用者 - 主キー (複合主キーなら組み合わせ)
- 外部キーの参照先 - 日本語 (自然言語) のカラム定義 3か月後の自分のためにもなるし、作ったデータマートの利用者も増えると思うよ! 特にLLMの時代はドキュメントが重要 © LayerX Inc. 5
例 項目 具体例 目的 EC部門の月次報告用で使う商品カテゴリ別の売上推移 想定利用者 EC部門のデータアナリスト カラム定義 year_month: 対象年月(YYYY-MM形式)(PK)
electronics_sales: 電化製品売上(円) fashion_sales: ファッション売上(円) food_sales: 食品売上(円) total_sales: 総売上(円) customer_count: 購入ユニークユーザー数 © LayerX Inc. 6
ドキュメントの下書き生成プロンプト (参考) 現時点では o3-mini など考えるモデルがオススメ。 {} は自分で編集する © LayerX Inc.
7
こんなデータマートは嫌だ。 どんな?
汎用性が低い ▸ 月次で集計済み ▸ カテゴリーでピボット済み © LayerX Inc. 9
月次で集計済み year_month total_sales customer_count 2025-01 10,500,000 3,240 2025-02 9,800,000 3,050
2025-03 11,200,000 3,420 ▸ 問題点 - 3月の売上急増の原因日(イベント日など)を特定できない - ある特定の週だけ売上が落ちていても月合計では気づけない - 「月初10日間」の前年同期比など、柔軟な分析ができない © LayerX Inc. 汎用性が低い 10
カテゴリーでピボット済み year_month total_sales electronics_sales fashion_sales food_sales 2025-01 10,500,000 5,200,000 3,800,000
1,500,000 2025-02 9,800,000 4,700,000 3,500,000 1,600,000 2025-03 11,200,000 5,500,000 4,100,000 1,600,000 ▸ 問題点 - 新カテゴリー「home_goods」追加時にカラム追加・スキーマ定義の変更が必要 - サブカテゴリー(スマホ、PC、AV機器など)の追加はどうする - 一つの商品が複数カテゴリーに所属する場合(電化製品かつギフト商品など)の対応が難しい © LayerX Inc. 汎用性が低い 11
汎用性を上げるコツ ▸ 目的と用途を明確にし、言われた通りに作らない ▸ 用途の範囲内で粒度を最小に保つ ▸ ピボットしない (横持ちしない) © LayerX
Inc. 12
目的と用途を明確にし、言われた通りに作らない 「今度の経営会議で月次の売上推移を報告するので、データ出して」という要望を受けた場合 ▸ なぜ必要? → 「マーケティング施策の効果を確認したい」 ▸ どう活用? → 「カテゴリ別予算配分の意思決定に使う」
▸ 意思決定の頻度は? → 「経営会議は月次だけど、週次のマーケティング定例でも議論」 ▸ 他に見たい切り口は? → 「新規・リピート別の効果も知りたい」 → 必要なのは日次または週次の商品カテゴリ別のデータで、顧客タイプ別の分析も可能なデータマート © LayerX Inc. 汎用性を上げるコツ 13
用途の範囲内で粒度を最小に保つ 月次集計 日次(適切な粒度) 時間単位(必要な場合) year_month: 2025-03 total_sales: 11,200,000 date: 2025-03-15
total_sales: 384,000 timestamp: 2025-03-15 18:00 total_sales: 48,000 ▸ 用途に応じて粒度を選択 - 時間単位 → 特売セール開始直後の売上急増、終了前の駆け込み需要を把握 - 日次 → 平日/週末の傾向の違い、給料日効果などを分析 - 月次 → 日次データから集計可能 時間単位にするとレコード数が日次の24倍になり、コスト増加やパフォーマンス悪化の可能性 → 必要な場合のみ使用 © LayerX Inc. 汎用性を上げるコツ 14
ピボットしない (横持ちしない) date category sales 2025-03-01 electronics 180,000 2025-03-01 fashion
125,000 2025-03-01 food 52,000 ▸ 正規化形式 (縦持ち) のメリット - 新カテゴリー「home_goods」を追加してもスキーマ変更不要 - サブカテゴリーの追加が容易(categoryとsub_categoryの2列で表現可能) - 一つの商品が複数カテゴリに所属する場合も自然に表現できる - ピボットしたければBIツールで簡単にできる © LayerX Inc. 汎用性を上げるコツ 15
ディメンショナル・モデリング (発展編) ▸ 基本的な考え方 - 何を (Fact/指標) どのように (Dimension/軸) 見るかでモデリングする
- Factテーブル : 測定値・集計対象となる指標 - 例 : 売上金額、数量など - 集計関数 (COUNT, SUM, AVG など) の対象になることが多い - Dimensionテーブル : 分析軸となる属性情報 - 例 : 契約日、商品、顧客など - グルーピング・フィルタリング (GROUP BY / WHERE) の対象になることが多い ▸ メリット - 分析時に理解しやすい構造 - 結合 (JOIN) を減らせる - 新しい軸を簡単に追加できる - BIツールとも相性が良い 参考 : 30分でわかる『アジャイルデータモデリング』 by ucchi-さん © LayerX Inc. 汎用性を上げるコツ 16
こんなデータマートは嫌だ。 どんな?
クエリがカオス ▸ クエリ全体がとにかく長く、サブクエリ多用 ▸ 分かりそうで分からない謎の名前 (amt_dlyとか) ▸ 異なる単位やタイムゾーンが混在 ▸ NULLの代わりに使われてそうな値の説明がない
- -1 , 1970-01-01 , etc © LayerX Inc. 18
理解しやすいクエリを書くコツ ▸ 読んで意味のわかる名前をつけよう ▸ サブクエリをCTEに分解しよう (WITH句を使う) © LayerX Inc. 19
読んで意味のわかる名前をつけよう (1) ▸ 基本原則: 省略せず、明確に - amt → amount ▸
一貫性を保つ (以下は例) - テーブル名: 複数形 ( orders , customers ) - ID列: テーブル名の単数形+ _id ( order_id , customer_id ) - 日付/時間: 接尾辞で型を明示 ( created_date , created_at ) - コードと名称を区別 ( category_code / category_name ) 余談 : 生き残り続ける tmp_sales_202311 みたいなのもやめよう © LayerX Inc. 理解しやすいクエリを書くコツ 20
読んで意味のわかる名前をつけよう (2) 曖昧な名前 明確な名前 理由 price price_yen 通貨単位を明示 created_at created_at_jst
タイムゾーンを明示 count number_of_orders 何をカウントしているか明示 sales total_sales 合計値であることを明示 conversion_rate orders_per_page_views_percent 分子・分母、単位を明示 特に rate の分子・分母、単位 (小数、百分率、一万分率など) は重要 © LayerX Inc. 理解しやすいクエリを書くコツ 21
サブクエリをCTEに分解しよう (WITH句を使う) ▸ 問題点 - 入れ子構造で読みづらく、クエリの意図が掴みにくい - 重複が発生し、非効率 - 実は意味のないサブクエリだったりする
( SELECT * FROM table してるだけとか) ▸ CTEに分解すると… - 可読性が高く、役割も明確になり、メンテナンスしやすくなる - 重複やバグに気付きやすくなる 参考 : 人間のためのリーダブルSQL by tenajimaさん © LayerX Inc. 理解しやすいクエリを書くコツ 22
さいごに ▸ ここまで聞いてくれた方はきっと 「今がベストじゃない」 「もっと良くできるはず」と考えているのでは? ▸ あなたの作ったデータマートは、間違いなく事業を、組織を前に進めたと思います ▸ 「こんなデータマートは嫌だ」なんて言ってすみませんでした ▸
今日のLTが少しでもあなたのお役に立てば幸いです © LayerX Inc. 23
[PR] LayerX ではデータの民を募集中! データ基盤の土台 (Data warehouse, ETLなど) が整ってきました。 いよいよAI・データ分析での活用や、データマネジメントが楽しくなってくるフェーズです! (今回の話が好きな人はちょうどいいフェーズかも)
▸ 正社員・副業も可 ▸ 募集職種 - データアナリスト - データサイエンティスト - 機械学習エンジニア - アナリティクスエンジニア - データエンジニア LayerX 採用情報 → jobs.layerx.co.jp © LayerX Inc. 24