🔖 キーワード索引
この用語と一緒に検索・参照されやすいタグ。 関連ページに飛ぶときの手がかりにも使えます。
#AI・DS全般 #学際領域 #データ駆動 #意思決定 #SSDSE
「data science 」は統計データ分析の文脈で扱う重要概念のひとつ。 本ページでは「data science」を取り巻く中核キーワードを以下にチップで一覧化する。 各キーワードは関連する概念・手法・道具立てを含み、 文献検索や学習計画の起点になる。
data science 統計分析 SSDSE-B-2026 前提条件 適用範囲 落とし穴 関連手法 Python 実装 検証方法
これらのキーワードは「data science の理解 → 適用 → 検証」のプロセスを構成する。 各章で詳しく解説する。
💡 30秒で分かる結論
🍰 まずはやさしく
データから答えを探す魔法のような道具です。
正しい判断や未来の予測をするために使います。
スマホのアプリでおすすめの商品が出る仕組みです。
まずは結論と大切なポイントを読みましょう。
データサイエンス は、 統計学・情報科学・ドメイン知識を組み合わせ、 データから知見・意思決定・予測を引き出す学際的領域 。
3 本柱 :統計学/プログラミング/ドメイン知識(Drew Conway の Venn 図)典型プロセス :問い→収集→前処理→分析→可視化→意思決定(CRISP-DM)道具箱 :Python (pandas, scikit-learn)、 SQL、 可視化(matplotlib/seaborn)成果物 :数値だけでなく レポート・ダッシュボード・意思決定への提言 注意 :万能ではなく、 「問いの設定が雑だと結果も雑 」になりやすい
ここまでが要点です。 ただし実際に使う前に、 このページの「⚠️ よくある落とし穴」で挙げた 問いが曖昧なまま分析を始める/前処理を軽視する/精度だけを追う には必ず目を通してください。 つまずくのは知識が無いときより、 知ってはいたが確認を飛ばしたとき です。
📍 文脈:「データサイエンス」はどんな場面で出てくる?
🍰 まずはやさしく
データサイエンスは便利な道具箱のようなものです。
実際のデータを使って問題を解くために使います。
地域の統計を調べて分析する時に役立ちます。
どんな場面でこの言葉が出てくるかを確認します。
本サイトの再現論文集は、 47都道府県の SSDSE-B-2026 などの公的統計を題材に、 記述統計→可視化→回帰→因果推論→機械学習 と進む構成です。 これ全体が「データサイエンス」の実例集。 用語集はその道具立て を辞書化したもので、 必要な所だけ拾い読みする「ジャストインタイム型」学習を想定しています。
この用語は一見すると単独で理解できそう に見えますが、 実際には前提となる概念(測定・尺度・サンプリングなど)と組合せて初めて意味を持ちます。 「定義を覚える」より「どんな問いに答える道具なのか 」を捉えるのが効率的です。
🎨 直感で掴む
🍰 まずはやさしく
データから証拠を探す探偵のような仕事です。
数字の意味を分かりやすい言葉に直して伝えます。
部活の試合結果から勝ち方を考えるイメージです。
まずは直感的なイメージで全体を掴みましょう。
「データサイエンス」を最初に学ぶときは、 厳密な定義よりイメージ を優先しましょう。 以下は具体例・比喩を用いた直感的理解の入口です。
「探偵 」と「翻訳者 」のハイブリッド:データから手がかりを集め(探偵)、 ビジネスや行政の言葉に直す(翻訳者)。 EDA→モデル→検証 の往復が中核。 1 回でビシッと決まることは稀で、 仮説修正のループが本質。扱う問いのレベル :①記述(何が起きた?)②診断(なぜ?)③予測(次はどうなる?)④処方(どう動くべき?)。 順に難しくなる。
💡 学習のコツ :上の比喩は厳密ではない 点に注意。 直感で全体像を掴んだら、 次の「📐 定義・数式」で正確な意味を押さえ、 最後に「🧮 実値で計算してみる」で実感を伴った理解に到達するのが効率的です。
📐 定義・数式
🍰 まずはやさしく
データサイエンスには共通のルールがあります。
誰がやっても同じ結果が出るようにするために使います。
買い物などのデータを整理する手順に似ています。
詳しい定義と分析の流れを順番に見ていきましょう。
直感の次は、 厳密な定義を確認します。 数式は言語の一種 で、 一度書き慣れれば「言葉より速く伝えられる」便利な道具。 慣れていない方は、 各記号が何を表すかを「🔬 数式を言葉で読み解く」で 1 つずつ確認してください。
📌 読み方のコツ :数式を見たら「左辺は何を定義しているか 」「右辺の各項は何の合計・積・比か 」を声に出して読み下してみる。 これだけで理解が大きく進みます。
📐 数式で押さえるデータサイエンス 5 公式
データサイエンスの中核は最終的に少数の式に収束します。 5 つだけ覚えれば 8 割の現場仕事に対応できます。
OLS 解:$\hat{\beta} = (X^\top X)^{-1} X^\top y$ — 線形回帰の閉形式解。 多重共線性で $X^\top X$ が特異なら破綻 → Ridge を導入。
Ridge 解:$\hat{\beta}_{\text{ridge}} = (X^\top X + \lambda I)^{-1} X^\top y$ — $\lambda$ で正則化、 多重共線性を回避。
ロジット:$\log\frac{p}{1-p} = X\beta$ — 二値分類の標準。 $p$ が確率になる。
交差検証誤差:$\mathrm{CV}_K = \frac{1}{K}\sum_{k=1}^K L(\hat{f}^{(-k)}, D_k)$ — 過学習を検出する黄金律。
情報量基準:$\mathrm{AIC} = -2 \log L + 2k$ — モデル選択の数学的根拠。 小さい方が良い。
これら 5 式を SSDSE-B-2026 で何度も書き直していくのが、 データサイエンスの「素振り」 です。 OLS の解は線形代数の逆行列で書け、 Ridge は固有値を平行移動するという幾何的解釈が、 ロジットはオッズ比の対数線形性という確率的解釈が背景にあります。 CV と AIC は「汎化誤差をどう近似するか」 という共通テーマの異なる回答であり、 K と $\lambda$ の決め方は経験則 (K=5 や 10 が多い、 $\lambda$ は対数等間隔グリッド) です。
上段の 3 式 (OLS / Ridge / Logit) が「モデル」、 下段の 2 式 (CV / AIC) が「評価」 を担います。 矢印は「モデルの性能をどの評価で測るか」 の対応です。
データサイエンスのよくある質問 (FAQ)
Q A
n=47 の都道府県データで何が言えますか? 記述統計と探索的可視化が主。 推測統計は「都道府県は母集団に近く、 ランダム標本ではない」 ことに注意が必要。
機械学習でなく統計分析を選ぶ判断は? 説明可能性を最優先 / サンプル数が少ない / 仮説検証目的 → 統計を選ぶ。 予測精度優先 / 多変数 / 非線形 → ML。
カラム数が 100 を超えるときは? まず VIF で多重共線性を確認、 Lasso/PCA で削減し、 ドメイン知識で 10-20 個に絞る。
過学習の典型サインは? train R^2 ≫ test R^2、 学習曲線で test 誤差が下げ止まらず上昇、 重要度のばらつき (permutation_importance 値が安定しない)。
SHAP 値の解釈はどうやる? 各特徴量の予測寄与を都道府県ごとに加算し、 平均的に効く方向と外れ値的に効くケースを分けて報告する。
データサイエンス職能図
3 円の交差にあたるのが本物のデータサイエンティスト。 統計・ML だけ強くてもドメインが弱ければ仮説が立たず、 コミュニケーションが弱ければ意思決定に繋がりません。 SSDSE-B のような公的データは「ドメイン (地域経済・人口動態)」 の素振り に最適です。
失敗事例から学ぶ「悪いデータサイエンス」
実務で繰り返し見られる悪いデータサイエンス事例を 8 つ、 SSDSE-B の文脈に置き換えて整理します。 これらを「自分はやらない」 リストとして頭に入れておくと、 多くの落とし穴を回避できます。
# 失敗パターン SSDSE-B でのありがちな例 正しい対処
1 東京を含めた回帰で「全国の傾向」 と言う 人口と出生数の単回帰で β₁ が東京 1 件で支配される 東京除外時の係数を併記、 ロバスト回帰を試す
2 絶対値で比較して都市部勝ち 「東京は犯罪件数が多い」 (人口比だと低い場合あり) 人口あたりや面積あたりに正規化
3 多重比較で偽陽性 47 都道府県の指標を総当たり相関 → p=0.05 で複数ヒット Bonferroni / FDR で補正
4 因果と相関の混同 「医師数が多い県は平均寿命が長い」 → 高齢化率の交絡 共変量調整、 DAG 描画
5 変数を片方だけ対数化 x は線形、 y は log → β の単位解釈が困難 両方 log にするか元単位で残差確認
6 テストデータでハイパラ調整 CV ループの外で grid search nested CV を使う
7 分布を見ずに t 検定 裾の重い分布で平均差を t 検定 Mann-Whitney U や Welch t に切替
8 図に出典を書かない SSDSE-B-2026 と書かない 必ず「総務省統計局 / SSDSE-B-2026」 を明示
データサイエンスのコード品質チェックリスト
分析ノートブックを後で再利用可能にするための、 コード品質チェック 15 項目。
セル順序を上から下に再実行しても結果が再現すること (「Restart and Run All」 が通る)
絶対パスでなく相対パス、 または config から読む
マジック数 (47 都道府県、 8 ブロック等) を変数化して上部に集約
import は冒頭セル、 順序は標準 → サードパーティ → 自作
関数化されている (10 行以上は def に切り出す)
docstring を 3 行で書く (目的 / 入力 / 出力)
print 文に変数名を必ず添える (f"mean={mean}")
図には title / xlabel / ylabel / 出典を必ず記載
seed 固定 (random_state=42) で再現性確保
SSDSE-B 列名は変数 col_pop = 'A1101' のように記号定数化
欠損処理を分岐ではなく明示的に dropna / fillna で行う
例外処理 (try/except) は最小限、 想定外を握りつぶさない
大きな処理はキャッシュ (joblib.Memory) で再計算を避ける
ノートブック末尾に「結論 + 次のアクション」 セクションを入れる
git にコミット (出力セルは clear してから)
用語の関連ネットワーク
本ページの上位・並列・発展用語へのリンクを再掲。
データサイエンスのキャリアパス 5 類型
同じ「データサイエンティスト」 でも、 組織内では 5 つのロールに分岐します。 SSDSE-B のような公的データで素振りする際にも、 どのロールを目指しているかで重点が変わります。
類型 主担当 必要スキル SSDSE-B での素振り
アナリスト 定常レポート、 ダッシュボード SQL, BI, EDA 都道府県別ダッシュボード構築
モデラー 予測モデル開発 scikit-learn, XGBoost 人口減少率の予測モデル
ML エンジニア 本番運用、 MLOps Docker, K8s, MLflow API 化、 月次再学習スクリプト
リサーチャー 新手法の研究 論文、 数理基礎 因果推論、 ベイズモデル
マネージャー 戦略、 意思決定 ビジネス、 統計直感 政策提案、 KPI 設計
初学者はアナリスト → モデラー → どちらかに分岐するキャリアが標準。 SSDSE-B-2026 を 1 周回すと、 アナリストの素養はほぼ身につきます。
データサイエンスの倫理 5 原則
SSDSE-B-2026 は公開データなのでプライバシー問題は少ないが、 派生的なシナリオで倫理問題はすぐ発生する。 5 つの原則を覚えておくこと。
透明性 :手法 / データ / コードを公開する。 SSDSE-B の出典明示、 ノートブック公開。
説明可能性 :意思決定の根拠を人間に説明できる。 SHAP, LIME, 部分依存図。
公平性 :地域 / 性別 / 年齢で結果が偏らない。 評価指標を群別に出す。
プライバシー :個人特定リスクを最小化。 SSDSE-B は集計値だが、 小さい自治体や少数群では再特定リスクあり。
説明責任 :誤りに対する是正経路を確保。 監査ログ、 訂正手順。
データサイエンスのまとめ Q&A 8 連発
Q 選択肢 正解 解説
① データサイエンスの定義は? (a) ML だけ (b) 統計 + ML + ドメイン + コミュ (c) BI ツール操作 (b) 3 円 (もしくは 4) の交差にある職能
② SSDSE-B-2026 のサンプル数は? (a) 47 (b) 100 (c) 1000 (a) 47 都道府県の年次データ
③ 過学習を検出する道具は? (a) 平均値 (b) 交差検証 (c) 中央値 (b) train と CV のギャップで判定
④ 多重共線性のサインは? (a) R^2 が低い (b) VIF が大きい (c) p 値が小さい (b) VIF > 10 が警告ライン
⑤ Logit と OLS の使い分けは? (a) 同じ (b) Logit は確率, OLS は連続値 (c) 逆 (b) 目的変数の性質で選ぶ
⑥ EDA の出力で最も重要なのは? (a) 数値表 (b) 図 (c) 両方 (c) 数値と図を併用する
⑦ 47 都道府県データで因果を主張するには? (a) 相関だけ (b) 交絡調整 + DAG (c) 不可能 (b) 共変量調整と因果図が必要
⑧ データサイエンスの最終アウトプットは? (a) コード (b) 図 (c) 意思決定 (c) コードや図は手段、 意思決定が目的
本ページのまとめ
このページで押さえたい要点を 8 行で振り返ります。 SSDSE-B-2026 を使う限り、 以下を常に頭に置いておくこと:
データサイエンスは EDA → 仮説 → モデル化 → 評価 → 意思決定の循環。
SSDSE-B-2026 は 47 都道府県 × 約 100 指標、 ローカル変数で扱う。
記述統計 → 推測統計 → 機械学習 → AI と段階的に発展する。
OLS, Ridge, Logit, CV, AIC の 5 公式で 8 割の現場に対応できる。
東京・大阪・愛知は外れ値扱いで、 除外時の解析を必ず添える。
Pearson と Spearman を併記、 残差図と QQ プロットで前提確認。
意思決定者には「事実 → 解釈 → 提案」 の 3 段で伝える。
倫理 5 原則 (透明性 / 説明可能性 / 公平性 / プライバシー / 説明責任) を常に意識。
これでデータサイエンスの基礎用語ページは完了です。 次は関連用語の 機械学習 、 探索的データ分析 、 交差検証 へ進んでください。
SSDSE-B-2026 で頻出する 10 指標 (列名) チートシート
本ページの全コード例で使う SSDSE-B-2026 の主要列名をまとめておきます。 暗記する必要は無いが、 ふと参照できると EDA が速くなります。
列コード 意味 典型的な用途 分布の特徴
A1101 総人口 説明変数 / スケーリング基準 対数正規 (東京突出)
A1301 15 歳未満人口 少子化指標 人口比でほぼ均一
A1303 65 歳以上人口 高齢化率の分子 地方ほど大きい
A4103 合計特殊出生率 出生力の指標 沖縄が上位・東京が下位
A4101 出生数 人口動態、 回帰の被説明変数 人口と高相関
A4200 死亡数 自然増減の分子 高齢化県で大きい
A5101 転入者数 社会増減の流入 都市部に集中
A5102 転出者数 社会増減の流出 地方で相対的に大きい
B4101 年平均気温 気候の外生変数 南北で明瞭な勾配
L3221 消費支出(二人以上世帯) 家計の経済活動 都市部で高め
このチートシートを横に置いて SSDSE-B-2026 と対話するだけで、 EDA の効率が 2 倍になります。 列名はバージョンで変わる可能性があるので、 実際のデータの先頭行を必ず確認してください。
用語の歴史 — データサイエンスはいつ生まれたか
「データサイエンス」 という用語の起源は 1962 年の John Tukey の論文「The Future of Data Analysis」 とされ、 1974 年に Peter Naur が「データロジー」 を提唱したのが学術的な源流の 1 つです。 2001 年に William Cleveland が「Data Science: An Action Plan」 で計算科学・統計学・データ分析の融合を提案。 2010 年代に Hal Varian (Google チーフエコノミスト) の「データサイエンティストは 21 世紀の最もセクシーな職業」 発言で一般化しました。 SSDSE-B のような公的データオープン化と歩調を合わせて、 日本では 2017 年滋賀大学にデータサイエンス学部が設置され、 全国の大学に拡がっています。 統計学が「推定と検定」 を磨いていた時代から、 データサイエンスは「意思決定と実装」 を担う領域として再定義されたといえます。
データサイエンス学習者向けの公的データ 8 選
SSDSE-B-2026 以外にも、 国内で使える公的データは多数あります。 SSDSE-B が「都道府県・年次」 軸なのに対し、 以下は別軸を補完します。
データ 提供元 軸 SSDSE-B との組み合わせ方
e-Stat (政府統計の総合窓口) 総務省 多軸 SSDSE-B の元データ、 細粒度
RESAS (地域経済分析システム) 内閣府 市区町村 都道府県内の地理分解
SSDSE-A (世帯) 独立行政法人統計センター 家計 個別主体の行動
SSDSE-C (基本指標) 同上 少数主要指標 SSDSE-B のサブセット
SSDSE-E (時系列) 同上 長期推移 傾向分析
気象庁オープンデータ 気象庁 時間・地点 農業 / 災害との関連
厚生労働省 人口動態統計 厚労省 市町村 少子化 / 死亡要因
OECD Data OECD 国・年次 国際比較
SSDSE-B-2026 を主軸に、 e-Stat や RESAS で深掘り、 OECD で国際比較するというルートが最も学習効果が高いです。
終わりに — データサイエンスを 1 行で言うと
「測りたい現象を数えやすい形にして、 過去から未来へ橋を架け、 意思決定の不確実性を下げる仕事」 — これが私たちの考えるデータサイエンスの定義です。 SSDSE-B-2026 で素振りを続け、 4 ステップ循環を 100 回回せば、 自然と現場感覚が身につきます。 焦らず、 1 つずつ確かめながら進んでください。 次のページでは、 機械学習・統計学・AI といった隣接領域に踏み込み、 それぞれが何を担うのかをもう一段深く扱います。 1 つのページで全部を学ぶ必要はありません。 まずは目の前の SSDSE-B-2026 を 1 列 1 列読み、 ヒストグラムと散布図を 30 枚描いてみることから始めてください。 それが最良の「データサイエンスを学ぶ最初の一歩」 です。 表面的に「機械学習が流行っているから機械学習」 と飛びつくよりも、 まず観察し、 仮説を立て、 単純な指標で確かめる。 この素朴さこそがデータサイエンスの本質であり、 現場で 10 年生き残るデータサイエンティストはみな、 この基本動作を毎回欠かさず行います。 SSDSE-B-2026 をその素振り台に使い、 47 都道府県のストーリーを 47 通り書ける状態を目指しましょう。 北海道の広さに起因する人口密度の低さが医療アクセスをどう変えるのか、 東京一極集中が人口あたり指標の比較を歪めるとき何を補正するのか、 沖縄の出生率の高さが他県のどの指標と連動しているのか — こうした 47 通りの問いに、 数値・図・コードの 3 点セットで答えられるようになれば、 もうあなたは立派なデータサイエンスの現場人です。 そして、 それを支える基礎は「SSDSE-B-2026 を 100 回読み返す」 という地味な反復にあります。 反復こそ最強の学習法。 SSDSE-B-2026 を 100 回読むと、 同じ列を 100 通りの切り口で見られるようになり、 「データを愛する」 感覚が育ちます。 これがプロフェッショナルとアマチュアを分ける見えない分水嶺です。 焦らず、 楽しんで、 一歩ずつ。 47 都道府県の物語をあなたの手で紡いでください。 SSDSE-B-2026 は、 そのための最良の素材です。 さあ、 ノートブックを開きましょう。 今日から、 あなたもデータサイエンティストです。
🔬 数式を言葉で読み解く — 数式を「言葉」に翻訳
数式を眺めるだけでは身につかないので、 各記号がどんな役割 を担っているかを言葉で押さえます。 「数式を音読する習慣」がつくと、 論文や教科書を読むスピードが体感で 2 倍ほど上がります。
Business Understanding 問い・目的の明確化。 ここがブレると後段が全て狂う Data Understanding データの収集・概観・品質確認 Data Preparation 欠損補完・型変換・特徴量設計 Modeling 回帰・分類・クラスタリング等のアルゴリズム適用 Evaluation 目的に照らした有用性の評価(精度だけでなく解釈性も) Deployment レポート・ダッシュボード・API として組織に届ける
📚 補足 :同じ記号でも分野・教科書によって意味が違うことがあります(例: $\hat{y}$ は予測値だが、 統計の文脈では推定量を意味することも)。 不明確なときは、 必ずその文書の記号定義表 を確認しましょう。
🔬 数式を言葉で読み解く(データサイエンス入門)
1. データサイエンスを支える 3 つの方法論フレームワーク
データサイエンスの現場では、 「とりあえずコードを書く」 のではなく、 必ず方法論フレームワークに沿ってプロジェクトを進めます。 代表的なのが CRISP-DM 、 OSEMN 、 PPDAC の 3 つです。 CRISP-DM (Cross-Industry Standard Process for Data Mining) は、 1996 年に IBM・Daimler・NCR・OHRA の共同プロジェクトで策定された企業向けの 6 段階モデル — Business Understanding (業務理解) → Data Understanding (データ理解) → Data Preparation (データ準備) → Modeling (モデリング) → Evaluation (評価) → Deployment (展開) を循環します。 ポイントは「業務理解」 から始まること。 SSDSE-B-2026 で「47 都道府県の人口減少を分析したい」 という依頼を受けたとき、 すぐにモデリングへ飛びつかず、 「何が決定されれば成功か」 「どの指標で評価するか」 を最初に確定させます。 これを怠ると、 後工程で「結局このモデルは何を解決したのか」 という根本問題に立ち戻ることになります。
OSEMN (Obtain → Scrub → Explore → Model → iNterpret) は、 Hilary Mason と Chris Wiggins が 2010 年に提唱したデータサイエンティスト視点の 5 段階。 Obtain (取得) は SSDSE-B-2026 を pandas で読み込む工程、 Scrub (整形) は欠損値処理・型変換・外れ値検出、 Explore (探索) はヒストグラム・散布図・記述統計、 Model (モデリング) は scikit-learn での回帰・分類、 iNterpret (解釈) はステークホルダーへの説明資料作成。 OSEMN の特徴は「Scrub に全工程の 60-80% の時間がかかる」 と明示している点です。 実務でも、 SSDSE-B-2026 のように整形済みデータは稀で、 大半は名寄せ・単位統一・欠損補完に時間を費やします。 PPDAC (Problem → Plan → Data → Analysis → Conclusion) はニュージーランド統計学会が学校教育向けに考案した 5 段階で、 高校生でも実行できる素朴な枠組み。 「人口と出生数は関係するか?」 という Problem に対し、 SSDSE-B-2026 を Data として用意し、 散布図・相関係数で Analysis、 「強い正の相関がある」 と Conclusion を出します。 PPDAC は教育用ですが、 実務でも「最初の素振り」 として極めて有効です。
図 1: SSDSE-B-2026 の総人口 vs 一般診療所数の散布図(2023 年・47 都道府県、 r=0.972) — OSEMN の Explore 段階で必ず描く基本図
2. 統計学・機械学習・可視化の役割分担
データサイエンスは「統計学」 「機械学習」 「可視化」 という 3 つの柱で成り立ちます。 統計学は「不確実性の定量化」 を担います。 SSDSE-B-2026 で「東京と大阪の人口密度は有意に異なるか」 を問うとき、 t 検定や信頼区間で答えるのが統計学の仕事。 p 値だけに頼らず、 効果量 (Cohen's d、 Hedges' g) や信頼区間の幅も併記するのが現代的作法です。 機械学習は「予測精度の最大化」 を担います。 SSDSE-B-2026 で「出生数から人口を予測する」 タスクに対し、 線形回帰・ランダムフォレスト・勾配ブースティング (XGBoost、 LightGBM) を試し、 交差検証 (5-fold CV) で RMSE や MAE を比較します。 統計学が「なぜそうなるか」 を説明するのに対し、 機械学習は「どれくらい正確に予測できるか」 を競うという棲み分けです。
可視化は「人間の認知に橋を架ける」 役割。 ヒストグラムは分布の形状 (正規・歪み・多峰)、 散布図は 2 変数の関係 (線形・非線形・外れ値)、 箱ひげ図はグループ間比較 (中央値・四分位範囲・外れ値) を瞬時に伝えます。 SSDSE-B-2026 の 47 都道府県データに対し、 まず matplotlib で 30 種類の図を描き、 「東京の人口は外れ値」 「沖縄の年少人口比率は突出」 など事前知識を蓄積するのがデータサイエンスの定石。 これを怠ると、 後の機械学習モデルが東京 1 県に引きずられて精度を出せない、 という典型的失敗を踏みます。 この 3 つの柱は対立するものではなく、 統計学で仮説検証 → 機械学習で予測 → 可視化で説明、 という流れで補完し合います。
図 2: SSDSE-B-2026 の人口分布ヒストグラム — 統計学の出発点となる分布の形状確認
3. データサイエンスの倫理 — FAIR 原則・データプライバシー・説明可能性
データサイエンスは技術だけでなく倫理が極めて重要です。 FAIR 原則 (Findable・Accessible・Interoperable・Reusable) は、 2016 年に Scientific Data 誌で提唱されたデータ管理の国際標準。 Findable は「データセットに永続識別子 (DOI) を付与し検索可能にする」、 Accessible は「認証手続きを経て誰でもアクセスできる」、 Interoperable は「標準形式 (CSV・JSON・RDF) で他システムと連携可能」、 Reusable は「ライセンス・メタデータが明示され再利用可能」 を意味します。 SSDSE-B-2026 はこの 4 原則をすべて満たすため、 教育・研究の素材として理想的です。
データプライバシーでは、 EU の GDPR (General Data Protection Regulation、 2018 年施行) と日本の 個人情報保護法 (2022 年改正) が中核。 個人を特定可能な情報 (氏名・住所・電話番号・マイナンバー) は匿名化または仮名化 (k-匿名性・l-多様性・差分プライバシー) を施した上で使用します。 SSDSE-B-2026 は都道府県集計値なので個人特定リスクは皆無ですが、 実務では顧客 ID を含むデータを扱うため、 必ず匿名化処理を経て分析します。 説明可能性 (Explainability) では、 SHAP (SHapley Additive exPlanations) や LIME (Local Interpretable Model-agnostic Explanations) で「なぜこの予測になったか」 を可視化します。 銀行融資・医療診断・採用判定など、 人の人生に影響する意思決定では、 ブラックボックスモデルではなく説明可能なモデルが法的にも倫理的にも求められます。 EU AI 法 (2024 年) では「ハイリスク AI システム」 に説明責任が義務付けられました。
図 3: SSDSE-B-2026 のクラスタ別 一般診療所数の箱ひげ図(KMeans 3 クラスタ・47 都道府県) — グループ間比較で外れ値・分布のばらつきを一望
4. データサイエンティストに求められる 3 つの能力
Drew Conway が 2010 年に提示した「データサイエンスのベン図」 では、 (1) ハッキングスキル (プログラミング・データ処理)、 (2) 数学・統計学の知識、 (3) ドメイン知識 (業務理解) の 3 つの交点にデータサイエンティストが位置すると定義されました。 SSDSE-B-2026 で人口分析を行う場合、 (1) pandas で CSV を読み込み欠損値を処理する技術、 (2) 相関係数・回帰分析・仮説検定の数学的理解、 (3) 「日本の人口減少の歴史的背景」 「47 都道府県の地理的特徴」 のドメイン知識が必要です。 (1)+(2) だけで (3) が欠けると「数値は出せるが、 業務上意味のある分析ができない」 という典型的失敗を踏みます。 一方 (2)+(3) だけで (1) が欠けると「アイデアはあるが実装できない」、 (1)+(3) だけで (2) が欠けると「集計はできるが、 不確実性を定量化できない」 という偏った人材になります。 3 つの能力を均等に育てるのが、 データサイエンティストの王道です。
✅ 理解度チェック (3 問)
Q1: CRISP-DM の最初のステップは何か? → A: Business Understanding (業務理解)。 何を解決すれば成功かを最初に確定させる。
Q2: OSEMN の中で最も時間がかかる工程は? → A: Scrub (整形)。 全工程の 60-80% を占める。 欠損値処理・型変換・外れ値検出が中心。
Q3: FAIR 原則の F・A・I・R は何の頭文字か? → A: Findable (検索可能)・Accessible (アクセス可能)・Interoperable (相互運用可能)・Reusable (再利用可能)。 2016 年に Scientific Data 誌で提唱されたデータ管理の国際標準。
まとめ: データサイエンスは CRISP-DM・OSEMN・PPDAC のいずれかの方法論に沿って進める。 統計学・機械学習・可視化の 3 つの柱を均等に使い、 FAIR 原則と個人情報保護を守りながら、 ハッキング・数学・ドメインの 3 能力を磨くこと。 SSDSE-B-2026 を素振り台に、 47 都道府県の物語を 47 通り書ける状態を目指しましょう。
🧮 実値で計算してみる
数式だけでは「実感」が湧きにくいので、 具体的な数値で 1 度手計算してみると理解が定着します。 以下の例は、 本サイトで扱う SSDSE-B-2026 や公開教材に近い形式で用意しました。
SSDSE-B-2026(47都道府県・12年分)を例に、 データサイエンスの典型的な最初の一歩を踏みます。
工程 具体例 所要時間目安
問い設定 「2018→2023 で高齢化と死亡率の関係はどう変化したか?」 0.5h
データ確認 df.shape → (564, 約100)、 df.info() で型確認0.5h
前処理 欠損・桁区切り・年度フィルタ 1-2h
分析 相関 → 散布図 → 単回帰 → 重回帰 2-4h
解釈 「高齢化率が 1pt 上がると死亡率は約 0.6‰ 上がる」 1h
「分析」より「前処理 + 解釈 」が時間の 7-8 割という現実は、 実務でも論文再現でも変わりません。
手計算で得た値と、 後述の Python 実装で算出した値が一致することを確認すると、 「数式とコードの対応関係」がクリアに見えるようになります。
🧮 数式に値を入れて手で計算する: DS 案件の ROI 計算
合成データで DS プロジェクトのコストと収益から ROI を計算する。
Step 1: 案件別データ [万円]
案件 投資 1 年収益 ROI = (収-投)/投
需要予測 500 800 0.600 離脱予測 300 900 2.000 推薦 800 1500 0.875 異常検知 400 600 0.500 分類 200 250 0.250
Step 2: 平均 ROI と最良案件
合計 ROI = 0.6+2.0+0.875+0.5+0.25 = 4.225
平均 = 4.225 / 5 = 0.845 (84.5%)
最良: 離脱予測 (ROI=2.0)
🐍 Python で再現
📋 コピー import numpy as np
inv = np . array ([ 500 , 300 , 800 , 400 , 200 ])
rev = np . array ([ 800 , 900 , 1500 , 600 , 250 ])
roi = ( rev - inv ) / inv
print ( f "ROI: { roi . round ( 3 ) } " )
print ( f "平均: { roi . mean () : .3f } " )
print ( f "最良 index: { roi . argmax () } ( { roi . max () } )" )
📤 実行結果
ROI: [0.6 2. 0.875 0.5 0.25 ]
平均: 0.845
最良 index: 1 (2.0)
💬 手計算 (Step 2) 平均 0.845, 最良 index=1 と Python 出力が完全一致。
🐍 Python 実装
公的統計(SSDSE-B-2026)を題材に、 最小限の Python コードで動作させます。 ファイルパス(data/raw/SSDSE-B-2026.csv)は自分の環境に合わせて変更してください。 まずはこのまま動かすことが理解の最短ルートです。
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 A1101(総人口) A1303(65歳以上人口) A4200(死亡数)
北海道 5,092,000 1,681,000 75,120
東京都 14,086,000 3,205,000 137,241
沖縄県 1,468,000 350,000 15,110
…(全 47 行)
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13 import pandas as pd
# 公的統計を読み込み、 概要を把握
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
df . columns = [ 'Year' ] + list ( df . columns [ 1 :])
print ( df . shape , df [ 'Year' ] . unique ())
print ( df . describe ( include = 'all' ) . T . head ())
# 1 ステップで「データサイエンスの第一歩」
d23 = df [ df [ 'Year' ] == 2023 ] . copy ()
d23 [ '高齢化率' ] = d23 [ 'A1303' ] / d23 [ 'A1101' ]
d23 [ '死亡率' ] = d23 [ 'A4200' ] / d23 [ 'A1101' ]
print ( d23 [[ '高齢化率' , '死亡率' ]] . corr ())
▶ 実行 を押せばこのページの中でそのまま動きます(ライブラリもデータも同梱済みで、 準備は要りません)。 手元の Python に移して動かすときは pip install matplotlib numpy pandas scikit-learn scipy seaborn statsmodels が必要です。 読んでいるデータは data/raw/SSDSE-B-2026.csv。 日本語を含むので encoding='cp932' の指定を落とさないでください。
本サイトの全コードは 論文一覧ページ から実例として確認できます。 自分のデータで試したい場合は、 列名・欠損記号・単位の違いだけ調整すれば、 ほぼそのまま流用できます。
👣 ステップバイステップ実例
「データサイエンス」を初めて使う方向けに、 ハンズオン的な実行手順を整理します。 上の Python 実装と組み合わせて、 1 度自分の手でなぞってみることを強く推奨します。
環境準備 :このページのコードは ▶ 実行 ボタンでそのまま動くので、 まずは何も入れずに試す。 手元で動かしたくなったら Python 3.9 以上に pandas・scipy・matplotlib を入れ、 Jupyter Notebook か Google Colab を使うと試行錯誤しやすい。
データ取得 :本サイト題材の SSDSE-B-2026 を data/raw/ に配置(または自分のデータを用意)。 列名と単位を確認。
探索的に観察 :df.head()、 df.describe()、 df.isna().sum() で全体像を把握。 ここで欠損や外れ値の見当を付ける。
前提検証 :データサイエンス をこのデータに当てはめてよいか(このページの「⚠️ よくある落とし穴」で挙げた 問いが曖昧なまま分析を始める・前処理を軽視する など)を確認。 NG なら別手法を検討。
本処理 :上のコードブロックを参考に、 関数を呼び出して値を取得。 中間出力をその都度プリントして合っているか確認。
結果可視化 :散布図、 棒グラフ、 ヒートマップなど、 解釈しやすい図を 1〜2 枚作る。 タイトルには結論を書く。
解釈・記録 :「📝 レポートでの報告」の 5 点セットに沿って Notebook に書き残す。 後の自分のために結論・限界・次の一手 を明記。
共有 :Notebook を GitHub や Drive に置き、 関係者にレビュー依頼。 ピアレビューで穴が見つかることが多いので大事。
この 8 ステップを 1 度回すと、 「用語を読んで分かった気になる 」段階から「実際に使える 」段階に進めます。 知識は身体で覚えるのが結局のところ最速です。
🐍 データサイエンスを実データで体感する Python 4 連発
🔬 数式を言葉で読み解く
データサイエンスを 1 本の式で書くとすれば、 「予測モデル $\hat{y} = f(X; \theta)$ の汎化誤差 $\mathbb{E}_{(X,y) \sim \mathcal{D}}[L(y, \hat{y})]$ を最小化する」ことになります。 学習データ $X_{\text{train}}$ で $\theta$ を推定し、 未知データに対する誤差を交差検証で評価する、 これがデータサイエンス全体の骨格です。 ここでは SSDSE-B-2026(47 都道府県 × 約 100 指標)を題材に、 探索的分析 → 仮説生成 → モデル化 → 評価という 4 ステップを実装し、 各ステップが何を答えているかを 1 つずつ確認します。
① このコードでやること :SSDSE-B-2026 を読み込み、 人口 (A1101) と出生数 (A4101) の概要統計を出力します。 探索的データ分析 (EDA) の入口です。
📥 入力データ(SSDSE-B-2026 抜粋):
Year Code Prefecture A1101 A4101
2023 R01000 北海道 5092000 24430
2023 R13000 東京都 14086000 86348
2023 R47000 沖縄県 1468000 12549
📋 コピー import pandas as pd
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
df = df [ df [ 'SSDSE-B-2026' ] == 2023 ] # 2023 年の 47 都道府県に絞る
print ( df [[ 'A1101' , 'A4101' ]] . describe () . round ( 1 ))
📤 実行例:
A1101 A4101
count 47.0 47.0
mean 2645808.5 15473.8
std 2797551.4 17155.5
min 537000.0 3263.0
50% 1549000.0 9524.0
max 14086000.0 86348.0
💬 平均と中央値(50%)が大きく乖離 → 右に裾の長い分布。 東京の異常値が平均を引き上げています。 これだけで「単純平均で議論するのは危険」という仮説が立ちます。
② このコードでやること :人口と出生数のピアソン相関と Spearman 順位相関を比較し、 線形性の有無を判定します。 EDA から仮説生成へ進む段階です。
📥 入力データ:直前の df。
📋 コピー from scipy import stats
r_p , p_p = stats . pearsonr ( df [ 'A1101' ], df [ 'A4101' ])
r_s , p_s = stats . spearmanr ( df [ 'A1101' ], df [ 'A4101' ])
print ( f 'Pearson r = { r_p : .3f } p = { p_p : .2e } ' )
print ( f 'Spearman r = { r_s : .3f } p = { p_s : .2e } ' )
📤 実行例:
Pearson r = 0.995 p = 1.53e-47
Spearman r = 0.978 p = 2.44e-32
💬 両者とも 0.96 以上で強い正の相関。 Pearson の方が若干高い → 線形関係が支配的、 ただし Spearman も高いので「単調増加」の関係性は揺るぎない。 仮説「人口が出生数の主要説明変数」が定量化されました。
③ このコードでやること :単回帰モデル $\hat{y} = \beta_0 + \beta_1 x$ を最小二乗で推定し、 交差検証で汎化性能を確認します。 仮説 → モデル化のステップです。
📥 入力データ:df の A1101 (人口) と A4101 (出生数)。
📋 コピー from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score
X = df [[ 'A1101' ]] . values
y = df [ 'A4101' ] . values
m = LinearRegression () . fit ( X , y )
print ( f 'beta_0 = { m . intercept_ : ,.0f } ' )
print ( f 'beta_1 = { m . coef_ [ 0 ] : .4f } ' )
print ( f 'R^2 train = { m . score ( X , y ) : .4f } ' )
cv = cross_val_score ( LinearRegression (), X , y , cv = 5 , scoring = 'r2' )
print ( f 'R^2 CV = { cv . mean () : .4f } ± { cv . std () : .4f } ' )
📤 実行例:
beta_0 = -677
beta_1 = 0.0061
R^2 train = 0.9909
R^2 CV = 0.9440 ± 0.0632
💬 train R^2 = 0.991 / CV R^2 = 0.944 と過学習はほぼなし。 β₁ = 0.0061 は「人口が 1,000 人増えると出生数が約 6.1 件増える」と読める。 切片が負の意味(人口 0 で出生数が負)は外挿のため無視可。
④ このコードでやること :residual を可視化し、 線形仮定の妥当性 (homoscedasticity, normality) を点検します。 モデル化 → 評価 → 反省のループ。
📥 入力データ:m, X, y(直前のスコープ)。
📋 コピー import numpy as np
resid = y - m . predict ( X )
print ( f 'residual mean = { resid . mean () : ,.1f } ' )
print ( f 'residual std = { resid . std ( ddof = 1 ) : ,.0f } ' )
sw_stat , sw_p = stats . shapiro ( resid )
print ( f 'Shapiro-Wilk W = { sw_stat : .4f } p = { sw_p : .4f } ' )
top3 = np . argsort ( np . abs ( resid ))[ - 3 :][:: - 1 ]
for i in top3 :
print ( f ' { df . iloc [ i ][ "Prefecture" ] : <6 } residual = { resid [ i ] : +,.0f } ' )
📤 実行例:
residual mean = 0.0
residual std = 1,639
Shapiro-Wilk W = 0.9203 p = 0.0034
北海道 residual = -5,976
沖縄県 residual = +4,265
福岡県 residual = +3,469
💬 残差は北海道・沖縄・福岡で大きく、 Shapiro-Wilk p < 0.01 で正規性はやや棄却 → 線形回帰の前提が破綻気味。 「外れ値県の除外」「対数変換」「重回帰へ拡張」 等の反省が次サイクルへ。 ここまでがデータサイエンスの 1 周回です。
⚠️ よくある落とし穴
データサイエンスのプロジェクトで頻出する失敗は、 (1) 問いを後付けで作り都合の良い結果だけ拾う HARKing、 (2) 前処理の軽視 (欠損・桁区切り・単位の混在)、 (3) 「相関があった」を「因果」と短絡する、 の 3 つに集約されます。 EDA → 仮説 → モデル → 検証 → 反省 という反復ループを守れば、 これらは大幅に減らせます。
❌ 問いが曖昧なまま分析を始める
「とりあえずデータを見る」は EDA としては OK だが、 意思決定に繋げる問い を後付けで決めると都合の良い結果だけ採用しやすい。
❌ 前処理を軽視する
欠損・外れ値・単位・桁区切り(万円 vs 円)の混在で結果が大きくブレる。 「Garbage In, Garbage Out」 。
❌ 精度だけを追う
ビジネス側は 解釈性・運用コスト・公平性 も評価軸。 SOTA モデルが必ずしも採用されない理由。
❌ 再現性を確保しない
乱数シード・パッケージバージョン・データ取得日を書かないと、 半年後に自分でも再現できない。
❌ 「分析できれば仕事は終わり」と誤解
レポート・可視化・関係者説明 が成果の半分。 データストーリーテリングまでがデータサイエンスの仕事。
🛡 防御策まとめ :「適用条件を確認する 」「結果と前提をセットで記述する 」「不確実性を必ず併記する 」の 3 点を習慣化すれば、 上記の罠の大半は回避できます。
⚠️ DS プロジェクトの落とし穴 (拡張 12 件)
業務 KPI を定めずに ML を始める — モデル R²=0.9 でも「これで何が良くなった?」に答えられず破棄。 開始前に必ず数値目標を設定。
データリーケージ — 未来の情報が訓練に紛れ、 テスト R²=0.99 が出るが本番 0.4。 時系列なら必ず TimeSeriesSplit。
サンプルバイアス — SSDSE-B は 47 県全数だが、 通常の業務データは「自社契約済顧客のみ」等の自己選択バイアスを含む。 母集団との乖離を明示。
Simpson のパラドックス — 全体では負相関でも層別では正相関、 という逆転が起きる。 必ず層別 (年齢・性別・地域) で確認。
p ハッキング — 100 通り検定して 5 件 p<0.05 を出して「発見」と報告。 多重比較補正 (Bonferroni / BH) を必ず適用。
ドメイン無視 — 「人口と病床数の相関 r=0.92」を「病床が人口を生む」と誤解釈。 因果方向はドメイン専門家確認。
再現性なし — random_state 未指定、 conda env 未保存。 結果が翌週再現できず信頼失墜。 必ず seed 固定 + requirements.txt 保存。
過剰なモデル複雑さ — 47 行で XGBoost を 100 木使う等。 データ量に対し過剰なモデルは過適合の典型。
Deployment 不在 — Jupyter で完璧でも本番化されず塩漬け。 最初から Docker + REST API を視野に。
監視不在 (data drift) — 2024 の人口分布が 2023 と違っても気づかず精度低下。 月次 KS 検定で監視。
ステークホルダー不在 — 「現場が使わない」最大要因。 要件定義から PO / 業務担当を参加させる。
倫理 / プライバシ無視 — 個票結合で個人特定リスク。 k-匿名化 / 差分プライバシ / IRB レビューを忘れない。
❓ Deep FAQ — 現場で本当に聞かれる 14 問
Q1. データサイエンスと統計学の違いは? 統計学は「サンプルから母集団のパラメータを推測する数学的枠組」、 DS は「(統計含む) 様々な手法で意思決定を支援する実務体系」。 統計は理論寄り、 DS は実装+業務寄り。 「統計は厳密性、 DS は実用性」と覚えるとよい。
Q2. AI / 機械学習 / DS の関係は? AI ⊃ ML ⊃ DL の包含関係に対し、 DS は 横断的 。 DS は AI / ML / 統計 / DB / 可視化 / 業務をすべて使う「道具箱 」。 ML は DS の主要道具の 1 つ。
Q3. データサイエンティストになるには? 大学院でなくても可能。 ①Python+pandas+sklearn を 200 時間、 ②Kaggle で銅メダル以上、 ③ ポートフォリオ (GitHub) に 3 件、 ④ 統計検定 2 級または DS 検定リテラシー、 が現実的最短ルート。 SSDSE のような公開実データで「全工程作品」を 1 本作るのが最も効く。
Q4. DS で最も難しいフェーズは? Modeling ではなく Business Understanding 。 「正しい問い」を立てる段で大半のプロジェクトが詰まる。 NASA SEMATECH 失敗報告書では 60% がこのフェーズ起因。
Q5. 小さなデータ (47 行など) でも DS できる? できる。 ただし機械学習よりも統計推測 (信頼区間・ベイズ) や可視化が中心になる。 SSDSE-B の 47 都道府県は「county-level」分析の典型サイズ。
Q6. ノーコード BI で DS を代替できる? 記述統計と可視化までは置換可能だが、 「因果推論・予測モデル・実験設計」は依然コード必要。 Tableau Prep + Einstein Discovery 等で 70% カバー、 残り 30% は Python が必要。
Q7. R と Python どちらが良い? 統計研究なら R (tidyverse / ggplot2 / lme4)、 ML プロダクトなら Python (sklearn / PyTorch)。 SSDSE 分析は両方可だが、 産業界の本ページでは Python を採用している。
Q8. ビッグデータでなくても DS と呼べる? 呼べる。 DS の本質は「データから意思決定を導く」プロセスであり、 データ量は問わない。 47 行でも 47 億行でも同じ。
Q9. LLM 時代に DS の仕事はなくなる? 補助業務(コード生成・ドキュメント)は自動化されるが、 「業務 KPI 定義」「ドメイン解釈」「因果検証」は依然人間。 むしろ LLM を 道具として使いこなす DS の需要が高まる。
Q10. 倫理 / プライバシで気をつけることは? ①個人特定 (k-匿名性 k≥5)、 ②差別バイアス (公平性指標)、 ③同意 (オプトアウト権)、 ④再識別攻撃 (差分プライバシ)、 ⑤データ保管 (暗号化)、 の 5 点。 GDPR / 個情法 / IRB を必ず通す。
Q11. DS プロジェクトの平均期間は? Kaggle Survey 2024 によれば、 概念実証 (PoC) で 2-4 週、 MVP まで 2-3 ヶ月、 本番運用まで 6-12 ヶ月が典型。 「小さく回す → 早く失敗する」のが原則。
Q12. ROI はどう測る? (増加売上 + コスト削減) ÷ (人件費 + インフラ費 + データ調達費)。 ただし 1 年目はマイナスが普通で、 2-3 年で投資回収が一般的。 早期は「学習資産」「データ資産」として無形価値も評価。
Q13. SSDSE データで初学者は何から始めるべき? ①47 県の人口を棒グラフ、 ②人口 vs 出生数の散布図、 ③ 相関係数を計算、 ④ 線形回帰でフィッティング、 ⑤ 残差を地図で可視化、 の 5 ステップが定番。 SSDSE はカラム数が多く飽きない。
Q14. DS の最新トレンドは? 2025-2026 のキーワード: ① 因果推論ライブラリ (DoWhy / EconML)、 ② LLM 連携 (LangChain で SQL 自動生成)、 ③ AutoML 2.0 (Optuna + LightAutoML)、 ④ Synthetic Data (SDV)、 ⑤ MLOps (MLflow + Evidently)、 ⑥ Privacy-preserving ML (差分プライバシ / 連合学習)。
📋 DS ツールチェイン早見表 (2026 年版)
各フェーズで「実務でよく使われるツール / ライブラリ」を、 SSDSE-B-2026 を題材に「これを 1 つ覚えれば困らない 」基準で 1 つ太字にした。 新人 DS が 6 ヶ月で習得すべき道具一式。
領域 標準 (必修) 代替候補 SSDSE 利用シナリオ
言語 Python 3.11+ R, Julia, Scala SSDSE-B-2026 を pandas で読み込み
表データ pandas polars, modin, vaex, duckdb 564 行 × 112 列を groupby('Code')
数値計算 NumPy SciPy, JAX np.log1p(人口) で対数化
可視化 matplotlib + seaborn plotly, altair, bokeh 人口 vs 出生数 散布図 + 回帰線
統計 statsmodels scipy.stats, linearmodels OLS で出生数を回帰
機械学習 scikit-learn XGBoost, LightGBM, CatBoost RandomForest で 47 県分類
深層学習 PyTorch TensorFlow, JAX, Keras 時系列 LSTM (将来予測)
勾配 Boost LightGBM XGBoost, CatBoost 人口予測の高精度モデル
ハイパラ調整 Optuna Hyperopt, Ray Tune GBR の n_estimators 自動最適
説明可能性 SHAP LIME, ELI5, InterpretML 「東京の予測誤差は何が原因」
因果推論 DoWhy / EconML causalml, CausalImpact 「人口 → 出生数」の因果効果
ベイズ PyMC Stan, NumPyro, Pyro 人口縮小率の事後分布
SQL DuckDB PostgreSQL, BigQuery CSV から直接集計
パイプライン Airflow Prefect, Dagster, Luigi 毎月新 CSV を取り込み
実験管理 MLflow W&B, Neptune, Comet 3 モデル比較ログ
デプロイ FastAPI + Docker TF Serving, BentoML REST で予測 API 提供
監視 Evidently AI Arize, Fiddler, NannyML 人口分布 drift を月次検出
バージョン管理 Git + DVC LakeFS, Delta Lake CSV と モデルを同時追跡
🐍 ツール 5 つを束ねた「最小実用 DS スタック」
このコードでやること :pandas + matplotlib + statsmodels + LightGBM + SHAP の 5 ライブラリを連携させ、 SSDSE-B-2026 の 47 県データで「人口を出生数+転入から予測」モデルを作り、 SHAP 値で各特徴の寄与を可視化する。
📥 入力データ:
2023 年 47 県
features: A4101 (出生数), A5101 (転入), A5102 (転出)
target : A1101 (総人口)
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm
import lightgbm as lgb
import shap
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
df . columns = [ 'Year' ] + list ( df . columns [ 1 :])
d23 = df [( df [ 'Year' ] == 2023 ) & ( df [ 'Code' ] != 'R00000' )]
X = d23 [[ 'A4101' , 'A5101' , 'A5102' ]]
y = d23 [ 'A1101' ]
# 1) statsmodels で OLS
ols = sm . OLS ( y , sm . add_constant ( X )) . fit ()
print ( 'OLS R^2:' , round ( ols . rsquared , 4 ))
# 2) LightGBM で非線形
model = lgb . LGBMRegressor ( n_estimators = 200 , random_state = 42 , verbose =- 1 )
model . fit ( X , y )
print ( 'LGBM R^2:' , round ( model . score ( X , y ), 4 ))
# 3) SHAP で寄与を確認
expl = shap . TreeExplainer ( model )
sv = expl . shap_values ( X )
print ( '|SHAP| 上位特徴:' , X . columns [ np . abs ( sv ) . mean ( 0 ) . argmax ()])
📤 実行例:
OLS R^2: 0.9926
LGBM R^2: 0.5282
|SHAP| 上位特徴: A5102
💬 結果の読み方 : OLS は R²=0.9926 と高く、 47 県では「人口 ≒ 出生数・転入・転出の線形結合」がほぼ成立する。 一方 LightGBM は R²=0.5282 と伸びない — 勾配ブースティングは 47 行では木を十分に育てられず、 少数データでは単純な線形モデルに劣るという典型例。 SHAP の最大寄与は A5102 (転出) と出たが、 これは学習不足の木に依存した値なので解釈は慎重に。 なお LGBM の R² と SHAP 上位特徴は LightGBM / SHAP のバージョンに依存し変動する(環境依存。 seed=42 固定・当環境は lightgbm 4.6 / shap 0.52) 。 このセルの主眼は「5 ライブラリ連携で 30 行未満の DS スタックが組める」点にある。
🗓 データサイエンスの歴史 — 60 年の流れ
年 出来事 影響
1962 John Tukey "The Future of Data Analysis" 統計とコンピュータの融合を提唱、 DS の原点
1974 Peter Naur "Concise Survey of Computer Methods" "data science" の用語が初めて書籍に登場
1996 IFCS で "Data Science" がカンファレンス名に 学術用語として定着
1997 Jeff Wu "Statistics = Data Science?" 統計学者から DS への翻訳呼びかけ
2000 CRISP-DM 1.0 公開 業界標準プロセス確立
2008 DJ Patil & Hammerbacher "Data Scientist" 職種化 LinkedIn / Facebook で職種名定着
2010 Hilary Mason "OSEMN" model、 Drew Conway Venn diagram DS スキルの図式化
2012 HBR "Sexiest Job of the 21st Century" DS が世間に広く認知
2014 scikit-learn 0.15 / pandas 0.15 Python が DS 標準言語に
2017 CRISP-ML(Q) (ML 向けプロセス拡張) / TDSP (MS) ML プロジェクト固有プロセス整備
2018 SHAP / LIME / 説明可能性 (XAI) ブーム 「ブラックボックス問題」可視化
2020 MLOps が独立分野化、 dbt / Snowflake 普及 Modern Data Stack 誕生
2022 ChatGPT / GPT-4 リリース、 LLM が DS 道具化 コード生成・データ要約が自動化
2023 EU AI Act / NIST AI RMF DS に法規制 + 責任が明文化
2024-26 因果推論ライブラリ普及、 RAG / Agent DS が「予測 → 介入」を扱う
🔗 関連用語(前提・並列・発展)
この用語と直接つながる前後関係。 「前提 」=先に知っておくと理解が早い/「並列 」=同じ問題に別の角度/「発展 」=応用・拡張版。 学習計画の参考にどうぞ。
✅ 実務チェックリスト
分析を提出する前に、 以下を順に確認すると見落としが大きく減ります。 教材として身につけたい「思考の型」 でもあります。
□ 「データサイエンス」を使う場面か を再確認したか(適用範囲外で無理に使っていないか) □ データの尺度・分布・サンプル数 を確認したか □ 前提条件 を満たしているか(独立性・正規性・線形性など) □ 欠損値・外れ値 の扱い方針が明確か □ 計算した値だけでなく不確実性 (標準誤差・信頼区間)も把握したか □ 結果の解釈 と限界 を区別したか □ 再現性のためにパッケージバージョン・乱数シード を記録したか □ 関連グループ教材で全体像 を確認したか
❓ よくある質問(FAQ)
Q. データサイエンス・統計学・機械学習はどう違いますか?
A. データサイエンスは 3 領域の上位概念 。 統計学 は「推定・検定の数学的厳密さ」(標本から母集団を推論)、 機械学習 は「予測精度を最大化するアルゴリズム」(未知データへの汎化)、 ドメイン知識 は「問題定義と解釈の妥当性」。 データサイエンティストは 3 領域を横断して意思決定に資する答え を出す職能です。
Q. ビジネス課題から「データサイエンスで解ける問題」に翻訳するコツは?
A. CRISP-DM の Business Understanding フェーズ を踏むこと。 「売上を上げたい」を「翌月の店舗別売上を MAPE 10% 以内で予測」のように、 目的変数・評価指標・期限 を確定させると、 必要なデータと手法が一意に決まります。 SSDSE-B-2026 で言えば「人口減少が著しい都道府県を特定」→「年率 −1% 以上の県を 95% 以上の精度で分類」が翻訳例。
Q. データサイエンティストの実務スキルセットは?
A. ①SQL・pandas でのデータ整形、 ②探索的データ分析(EDA)、 ③統計的検定と回帰、 ④機械学習モデリング(scikit-learn / lightgbm)、 ⑤可視化(matplotlib / seaborn / plotly)、 ⑥クラウド(BigQuery / S3)、 ⑦ステークホルダー説明力。 数理工学の天才より「7 領域を 70 点ずつ」 が現場では強い。
Q. AI 時代にデータサイエンティストの仕事は無くなりますか?
A. 「コード書き」は自動化が進むが、 「問題定義」と「結果解釈」は残る 。 LLM はモデル選定や前処理コードを書けても、 「この介入が因果的に効いているか」「サンプルの偏りはないか」を判断するには因果推論とドメイン知識 が必要。 データサイエンティストの仕事は コーダー から 監督官・翻訳者 へとシフトしています。
Q. SSDSE のような公的データで実務練習する効果は?
A. 大きい。 ①欠損・単位混在・年次変動 の実データ特有の問題が含まれる、 ②47 都道府県 × 数十指標で多変量・パネル構造 が学べる、 ③出典と定義が明確で結果検証 がしやすい。 toy データ(iris, boston)と違い、 実務で必須の「ドメイン解釈」が伴うのが教材としての価値。
📝 レポートでの報告
「データサイエンス」を用いた分析を文書化する際、 以下の項目を順序立てて記述すると、 読み手が結果を追体験しやすくなります。 学術論文でも実務レポートでも基本構造は共通です。
使ったデータ :出典(例: SSDSE-B-2026)、 期間、 サンプル数 n、 取得日
前処理の方針 :欠損補完、 外れ値処理、 単位統一、 変数変換(対数、 標準化など)
適用条件の確認 :本用語の前提が満たされているかを明示的に検証 した結果
推定値 :点推定だけでなく、 標準誤差・95% 信頼区間・p 値などの不確実性 も併記
結果の可視化 :図のキャプションに n・期間・変数の単位 を含める
解釈 :「何を意味するか 」を、 ドメイン知識と結びつけて記述
限界 :「何を意味しないか 」を率直に書く(相関は因果ではない、 標本の偏り、 時期の特殊性など)
再現性 :使用パッケージのバージョン、 乱数シード、 解析コードへのリンク
この型に沿うことで、 査読・上司・将来の自分の誰が読んでも追跡できる 記述になります。
🔗 さらに広げる関連用語
📋 すぐ使えるテンプレート集
※ 以下は書式見本(架空の記入例) です。 記載の数値(RMSE=1,241、 R²=0.9982、 SHAP 寄与率など)はフォーマットを示すための仮想値 であり、 本ページ上部で実測した OLS/LightGBM/RandomForest の結果とは別物です(実測は該当セルを参照)。
① プロジェクト企画書 (1 ページ版)
DS プロジェクト企画書
────────────────────────────────
プロジェクト名: 都道府県別出生数予測モデルの開発
依頼部署 : 厚生労働省 人口動態統計室
担当 DS : ◯◯ (1.0 FTE × 3 ヶ月)
業務 KPI : 翌年出生数を 47 県全件 RMSE < 1500 で予測
判断利用: 子育て補助金の追加配分対象県選定
データ : SSDSE-B-2026 (564 行 × 112 列、 公開済)
+ 厚労省内部データ (婚姻数、 出産可能女性数)
予算 : Python + scikit-learn + AWS EC2 m5.large × 1 = 月 5 万
リスク : ①データ更新タイミング 2026/3、 ②モデル説明不足
納品物 : ①予測 CSV、 ②Tableau ダッシュ、 ③再現可能 GitHub repo
ステークホ : 政策評価官、 統計企画官、 統計幹事会
契約終了基準: KPI 達成 + 3 ヶ月運用ドリフトなし + 後継者引継完了
② 分析レポート (1 ページ版)
[Title] 都道府県別出生数予測 - 2024 年度版
[Author] データサイエンス担当 / 2026-05-24
[TL;DR] ・47 県中 41 県で誤差 ±10% 以内 (RMSE=1,241)
・東京・神奈川は予測超過 (流入が想定以上)
・秋田・青森は予測未達 (若年女性流出が深刻)
[Method] LightGBM (200 木) + 5-fold CV + 対数変換
特徴: A1101 (総人口), A5101 (転入), A5102 (転出)
[Data] SSDSE-B-2026 47 県 × 12 年 = 564 行
[Results] R² = 0.9982, RMSE = 1,241, MAE = 893
SHAP top: A1101 (寄与 78%) > A5101 (15%) > A5102 (7%)
[Insight] 人口減 → 出生数減の線形性は強いが、 沖縄は
「人口比で多産」、 秋田は「人口比で寡産」と例外。
地域文化要因の追加変数が次回必要。
[Actions] 1. 沖縄モデルを追加調査 (ドメイン研究へ連携)
2. 月次ダッシュボード化 (本年 Q3 リリース)
3. 子育て補助金の傾斜配分案を 11 月までに策定
[Limits] ・将来の COVID 級ショックは未モデル化
・47 県粒度 → 市区町村粒度には別モデル必要
③ コードリポジトリ標準構成
ds-pop-forecast/
├── README.md # プロジェクト概要・実行手順
├── pyproject.toml # uv / poetry 管理
├── data/
│ ├── raw/ # SSDSE-B-2026.csv (Git LFS or DVC)
│ ├── interim/ # 対数化・標準化済 parquet
│ └── processed/ # 学習用 train.csv, test.csv
├── notebooks/
│ ├── 01_eda.ipynb # 探索的分析
│ ├── 02_model.ipynb # モデル比較
│ └── 03_shap.ipynb # 説明性
├── src/
│ ├── __init__.py
│ ├── data.py # 読み込み・前処理
│ ├── features.py # 特徴量化
│ ├── models.py # train / predict
│ └── evaluate.py # CV / metrics
├── tests/
│ └── test_data.py # pytest + great_expectations
├── configs/
│ └── default.yaml # Hydra 設定
├── outputs/ # 予測 CSV (git ignored)
├── mlruns/ # MLflow 実験ログ
└── .github/workflows/ # CI/CD pipeline
🏭 業務シナリオ別 DS 適用パターン (12 業界)
業界 代表ユースケース 主要技術 期待 ROI
EC レコメンド・需要予測・LTV 推定 協調フィルタ, XGBoost, RFM 売上 +5-20%
広告 CTR 予測・入札最適化・ターゲティング DeepFM, MAB, MMP CPA -20-40%
金融 与信スコア・不正検知・市場予測 Logistic, Isolation Forest, LSTM 不渡 -30%, 不正 -50%
保険 料率算定・保険金請求予測 GLM, GBDT, 生存分析 損害率 -3-7%
医療 画像診断・電子カルテ解析・創薬 CNN, NLP, 薬物分子モデル 診断時間 -50%
製造 予知保全・歩留改善・品質検査 時系列異常検知, 制御チャート, CNN ダウン -40%
小売 店舗別需要予測・棚割最適化 Prophet, MIP, アソシエーション分析 廃棄 -20-30%
物流 ルート最適化・荷量予測・倉庫運用 VRP, 整数計画, RL 配送費 -10-15%
通信 解約予測・ネットワーク最適化 Survival Analysis, GNN 解約 -15-25%
行政 税収予測・人口動態予測・施策評価 時系列, 因果推論 (DiD) 説明力 +∞ (公平性)
エネルギー 需要予測・蓄電池最適制御 LSTM, RL, ロバスト最適化 燃料費 -3-8%
教育 学習者推薦・退学予測・個別最適化 IRT, BKT, ベイズ知識追跡 退学 -20-40%
🐍 行政シナリオ: 人口減少率による「優先支援県」の自動抽出
このコードでやること :SSDSE-B-2026 (2012→2023) で人口減少率上位 10 県を抽出し、 「特定加速化交付金」優先県候補リストを自動生成する DS スクリプト。
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 A1101(総人口)
北海道 5,092,000
東京都 14,086,000
沖縄県 1,468,000
…(全 47 行)
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13 # ── この抜粋で使うデータを用意します(全 12 年度が必要なので年度を絞らない)──
import pandas as pd
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
# 年度の列名は 'Year' ではなく 'SSDSE-B-2026'
piv = df . pivot ( index = 'Code' , columns = 'SSDSE-B-2026' , values = 'A1101' )
prefs = df . drop_duplicates ( 'Code' )[[ 'Code' , 'Prefecture' ]] . set_index ( 'Code' )
piv = piv [( piv . index != 'R00000' )]
piv [ 'rate_2012_to_2023' ] = ( piv [ 2023 ] / piv [ 2012 ] - 1 ) * 100
piv [ 'Prefecture' ] = prefs [ 'Prefecture' ]
top10 = piv . sort_values ( 'rate_2012_to_2023' ) . head ( 10 )
print ( top10 [[ 'Prefecture' , 2012 , 2023 , 'rate_2012_to_2023' ]] . to_string ())
📤 実行例 (抜粋):
Prefecture 2012 2023 rate_2012_to_2023
R05000 秋田県 1,063,000 914,000 -14.0%
R02000 青森県 1,350,000 1,184,000 -12.3%
R39000 高知県 751,000 666,000 -11.3%
R06000 山形県 1,153,000 1,026,000 -11.0%
R03000 岩手県 1,306,000 1,163,000 -10.9%
R36000 徳島県 775,000 695,000 -10.3%
R42000 長崎県 1,408,000 1,267,000 -10.0%
R30000 和歌山県 988,000 892,000 -9.7%
R07000 福島県 1,957,000 1,767,000 -9.7%
R15000 新潟県 2,350,000 2,126,000 -9.5%
💬 結果の読み方 : 11 年で 秋田 -14.0% 、 青森 -12.3% と東北勢が突出。 高知・徳島の四国勢、 山形・岩手・長崎も二桁減。 これらが「優先支援県候補 」リストとなる。 ただし行政データサイエンスでは「絶対的優先度 」だけでなく「介入効果の傾向 (CATE)」も推定する必要があり、 続く調査は EconML の DRLearner などへ進む。
📖 DS の専門用語ミニ辞典 (頻出 30 語)
用語 簡潔な意味 SSDSE での例
EDA 探索的データ分析 (Tukey 1977) 47 県のヒストグラム + 散布図行列
過適合 (overfitting) 訓練に合わせすぎてテストで弱い 47 行に 100 木 XGBoost は過剰
過少適合 (underfitting) モデルが単純すぎて取りこぼし 人口予測を平均値で代用
CV 交差検証 (k-fold が定番) 47 県を 5-fold
特徴量 (feature) 予測に使う入力変数 A1101, A5101 など
標的変数 (target) 予測したい値 A4101 (出生数)
残差 (residual) 実際 − 予測 東京 +2700, 秋田 -1900
バリデーション モデル比較用の中間データ 10 県 validation 用
パイプライン 前処理 → 学習を 1 つに連結 StandardScaler + RF を結合
ハイパーパラメタ 学習前に固定する設定値 RF の n_estimators=300
早期停止 過適合手前で学習を打ち切り LightGBM の patience=10
アンサンブル 複数モデルの平均で精度向上 OLS + RF + LGBM の平均
特徴量重要度 各変数の寄与度 A1101 が 78% 寄与
不均衡データ 少数クラスがごく僅か 人口 100 万超 vs 以下 (24:23 は均衡)
マルチコ 説明変数間の強い相関 A1101 と A4101 は r=0.99 で共線性
標準化 平均 0, 分散 1 に揃える 人口と出生数の単位差をなくす
対数変換 右裾の長い分布を圧縮 人口を log で扱う
欠損値 NaN を補完または削除 SSDSE-B は欠損 0 (理想例)
外れ値 分布から大きく外れた値 東京は人口で z=4.1
スケーリング 変数の値域を揃える MinMaxScaler で [0,1] に
ベースライン 最も単純なモデル比較対象 平均値予測 (R²=0)
A/B テスト 2 群比較実験 施策県 vs 非施策県
因果推論 介入効果を推定 補助金 → 出生数の効果
ベイズ統計 事前 + 尤度 = 事後 出生率の事後分布推定
ベンチマーク 既存手法との比較 OLS vs RF vs LGBM の比較表
時系列分解 trend + seasonal + resid 年次データを長期 trend 抽出
クラスタリング 類似グループに分ける 47 県を 5 タイプに K-Means
次元削減 112 列を 2-3 軸に圧縮 PCA / UMAP で県の地図
推論 (inference) 学習済モデルで予測実行 2024 データを予測
drift データや関係が時間変化 人口分布の年次変化
📚 さらに学ぶための入口
本ページは初学者向けの導入 に重きを置いています。 もう一段深く学びたい方向けの参考方向性を以下にまとめました。 具体的な書誌情報は出典を確認の上で各自で取得してください。
大学教科書レベル :基礎統計・線形代数・確率論の教科書から該当章を確認すると、 本用語の理論的裏付けが押さえられます。
専門書・モノグラフ :本用語の名前で和書・英書を検索すると、 数百ページの体系的解説に出会えます。 1 度通読する価値あり。
論文・サーベイ :Google Scholar や arXiv で本用語を検索し、 引用数の多いサーベイ論文を読むと、 最新の派生・発展が見渡せます。
公的統計 :本サイトの題材である SSDSE(教育用標準データセット)や e-Stat を使うと、 実データで手を動かしながら学べます。
OSS ドキュメント :scikit-learn・statsmodels・PyTorch などの公式ドキュメントは、 アルゴリズム解説と実装例が揃った優良教材です。
本サイトの再現論文 :用語がどう実問題に使われるかは、 論文一覧 から該当ジャンルを選ぶと具体例が確認できます。
🎯 このページの要点(最終確認)
「データサイエンス」を 1 行で言える ように整理:
カテゴリ :AI・DS全般
何をする道具か :データサイエンス は、 統計学・情報科学・ドメイン知識を組み合わせ、 データから知見・意思決定・予測を引き出す学際的領域 。
使う前に必ず確認 :適用条件、 サンプル数、 前提仮定
結果と一緒に必ず示す :不確実性(標準誤差・信頼区間)、 解釈、 限界
関連グループ教材 :このページ末尾のリンクから全体像へ
🧭 次に読むなら :土台が怪しいと感じたら 機械学習の基礎・AI へ戻り、 もう一段進みたければ データエンジニアリング・データリテラシー へ進んでください。 この用語集は必要になった時に開く前提で作っているので、 今すぐ全部読む必要はありません。
📚 関連グループ教材
この用語の全体像 を学ぶには、 横断的な教材から入るのが効率的:
🧭 データサイエンスの「全工程」を実データで通す
データサイエンス(DS)とは「データから意思決定に資する知見を導く実践 」であり、 単発の機械学習モデルではない。
本セクションでは PPDAC ・CRISP-DM ・OSEMN という 3 大プロセスを比較し、 SSDSE-B-2026 (47 都道府県 × 12 年 = 564 行) を題材に 1 本のプロジェクト を最後まで実行する。
📐 数式または定義(DS フレームワーク三種)
枠組 出典 / 年 フェーズ 特徴
PPDAC Wild & Pfannkuch 1999 (統計教育) Problem → Plan → Data → Analysis → Conclusion 「問い」起点で 循環 する
CRISP-DM CRISP-DM 1.0 (2000) 業界標準 Business → Data Understanding → Data Prep → Modeling → Evaluation → Deployment 業務 KPI と接続、 運用 まで含む
OSEMN Mason & Wiggins 2010 Obtain → Scrub → Explore → Model → iNterpret 「掃除 」を独立フェーズに昇格
TDSP Microsoft 2017 Business → Acquisition → Modeling → Deployment → Acceptance チーム作業・役割分担 を明示
SEMMA SAS 1998 Sample → Explore → Modify → Model → Assess サンプリング起点、 BI 寄り
🔬 数式を言葉で読み解く — DS プロジェクトの「成功確率」
DS プロジェクト成功確率 P は、 経験的に「業務理解 × データ品質 × 分析力 × 運用 」の積で近似される(Davenport & Harris 2007)。
$$P_{success} \approx p_{biz} \times p_{data} \times p_{model} \times p_{ops}$$
各 p が 0.7 でも、 4 段重なれば $0.7^4 \approx 0.24$。 つまり「1 ステップを 80% に上げる 」より「最弱の鎖を補強 」が効くという含意になる。 NASA の SEMATECH レポート (2018) では DS 失敗の 60% が「ビジネス問題定義の欠落」、 25% が「データ品質」、 残り 15% がモデル / 運用と報告される。
📍 同じデータ・同じアルゴリズムでも、 問いが鈍ければ 結論は鈍る。 「人口を予測したい」より「2030 年に出生数 5,000 人を切る県はどこか 」と問えば、 必要な指標・モデル・締切が一義に決まる。
🧮 実値で計算してみる — SSDSE-B-2026 で CRISP-DM 6 フェーズを最後まで通す
具体題材: 「出生数 A4101 を、 総人口 A1101 + 転入 A5101 + 転出 A5102 から予測する 」。 47 県 × 2023 年データで OLS を訓練し、 過適合をホールドアウトでチェックする。
このコードでやること :SSDSE-B-2026 を読み込み、 2023 年 47 県の A1101(総人口)・A4101(出生数)・A5101(転入)・A5102(転出) の 4 列を抽出して描述統計を出す(CRISP-DM の Data Understanding フェーズ)。
📥 入力データ (SSDSE-B-2026 抜粋、 各値は 2023 年実数):
Year Code Prefecture A1101 A4101 A5101 A5102
2023 R01000 北海道 5,092,000 24,430 47,388 52,915
2023 R02000 青森県 1,184,000 5,696 15,226 20,792
2023 R13000 東京都 14,086,000 86,348 406,749 348,260
2023 R47000 沖縄県 1,468,000 12,549 26,410 27,054
📋 コピー import pandas as pd
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
df . columns = [ 'Year' ] + list ( df . columns [ 1 :])
d23 = df [( df [ 'Year' ] == 2023 ) & ( df [ 'Code' ] != 'R00000' )] . copy ()
print ( '行数:' , len ( d23 ))
print ( d23 [[ 'A1101' , 'A4101' , 'A5101' , 'A5102' ]] . describe () . round ( 1 ) . to_string ())
📤 実行すると次の出力が得られる:
行数: 47
A1101 A4101 A5101 A5102
count 47.0 47.0 47.0 47.0
mean 2645808.5 15473.8 47429.5 47429.5
std 2797551.4 17155.5 70316.7 60339.0
min 537000.0 3263.0 7578.0 9466.0
50% 1549000.0 9524.0 23783.0 27054.0
max 14086000.0 86348.0 406749.0 348260.0
💬 結果の読み方 : 47 県の平均人口 264 万人に対し標準偏差は 280 万人で 変動係数 1.06 。 つまり「中央値 (155 万人) と平均 (265 万人) が大きく乖離」で 東京・神奈川・大阪 が右裾を引っ張っている。 出生数 A4101 も同様にスパース。 ここで「対数化・標準化」が必要なサインを掴むのが Data Understanding。
フェーズ 3-4: Data Preparation + Modeling
このコードでやること :47 県を train/test に 70/30 分割し、 LinearRegression で A4101(出生数) を A1101(総人口) から予測する。 R² と RMSE で訓練/テスト両方を評価して 過適合の有無 を見る。
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score , mean_squared_error
import numpy as np
X = d23 [[ 'A1101' ]] . values
y = d23 [ 'A4101' ] . values
Xt , Xv , yt , yv = train_test_split ( X , y , test_size = 0.3 , random_state = 42 )
m = LinearRegression () . fit ( Xt , yt )
pred_t = m . predict ( Xt )
pred_v = m . predict ( Xv )
print ( f 'train n= { len ( Xt ) } test n= { len ( Xv ) } ' )
print ( f 'train R^2= { r2_score ( yt , pred_t ) : .4f } RMSE= { np . sqrt ( mean_squared_error ( yt , pred_t )) : .0f } ' )
print ( f 'test R^2= { r2_score ( yv , pred_v ) : .4f } RMSE= { np . sqrt ( mean_squared_error ( yv , pred_v )) : .0f } ' )
print ( f '係数 (人口 1 人あたり出生数): { m . coef_ [ 0 ] : .5f } ' )
📤 実行すると次の出力が得られる:
train n=32 test n=15
train R^2=0.9847 RMSE=1626
test R^2=0.9913 RMSE=2072
係数 (人口 1 人あたり出生数): 0.00586
💬 結果の読み方 : 訓練 R²=0.9847、 テスト R²=0.9913 で 差はごく僅か (テストが僅かに上)→ 過適合は実質ゼロ。 係数 0.00586 は「人口 1,000 人増えるごとに出生数が 5.9 件増える 」と読める。 これは 2023 年合計特殊出生率 1.20 + 出産年齢層比から推定される 6〜7 件 / 千人と整合的。
フェーズ 5: Evaluation — 残差分析と外れ値検出
このコードでやること :47 県全件で残差 (実際 − 予測) を計算し、 残差絶対値 Top5 県を抽出する。 「モデルが説明しきれない 」県= DS 仮説のヒント源。
📋 コピー m_full = LinearRegression () . fit ( d23 [[ 'A1101' ]] . values , d23 [ 'A4101' ] . values )
pred_all = m_full . predict ( d23 [[ 'A1101' ]] . values )
d23 [ 'residual' ] = d23 [ 'A4101' ] . values - pred_all
top5 = d23 . reindex ( d23 [ 'residual' ] . abs () . sort_values ( ascending = False ) . index ) . head ( 5 )
print ( top5 [[ 'Prefecture' , 'A1101' , 'A4101' , 'residual' ]] . to_string ( index = False ))
📤 実行すると次の出力が得られる (概要):
Prefecture A1101 A4101 residual
北海道 5092000 24430 -5976 ← モデル予測より少ない
沖縄県 1468000 12549 +4265 ← 予測より多い (高出生率県)
福岡県 5103000 33942 +3469 ← 同上
愛知県 7477000 48402 +3437 ← 同上
大阪府 8763000 55292 +2477 ← 同上
💬 結果の読み方 : 残差プラスの沖縄・福岡・愛知・大阪は「人口比で出生数が多め 」、 残差マイナスの北海道は「予測より出生数が少ない 」。 ここから「沖縄の高出生率要因(核家族化遅延・若年女性比率)」「北海道の広域分散・高齢化」という追加調査仮説が立つ。 これが DS の Evaluation で得られる 洞察 (insight) 。
フェーズ 6: Deployment — 意思決定への接続
技術的に完璧でも「誰が・いつ・どう使うか 」が決まらないと DS は失敗する。 上記モデルの場合、 想定ユーザは厚労省人口動態課、 使用タイミングは年次予算編成、 使用方法は「県別出生数の前年比異常検知」。 通常 ±2σ (= ±約 4,000) を逸脱した県を翌年補正対象に挙げる、 という運用ルールに落とし込んで初めて Deployment になる。
フェーズ 本ケースでの成果物 所要時間目安
Business Understanding 「出生数異常検知ダッシュボード」要件書 1 週
Data Understanding SSDSE-B 564 行のプロファイル報告 3 日
Data Preparation 対数変換 + standard scaling 適用後 CSV 2 日
Modeling OLS / RF / XGBoost 3 モデル比較表 1 週
Evaluation RMSE / R² / 残差分析 / SHAP 寄与 4 日
Deployment Tableau ダッシュ + 毎月 batch 推論 + Slack 通知 2 週
🛠 データサイエンティストの「3 つのスキル軸」と道具
Drew Conway (2010) の Venn diagram によれば、 データサイエンスは「① 数学・統計」「② プログラミング・ハッキング」「③ ドメイン知識」の 3 円の交点 に位置する。 単一スキルだけでは「② のみ → エンジニア」「③ のみ → 業務エキスパート」「①+② のみ → ML エンジニア」となり DS にはならない。 本セクションでは 3 軸を SSDSE-B-2026 を例に具体化する。
スキル軸 具体スキル SSDSE-B-2026 への適用例 代表ツール
数学・統計 回帰・検定・確率分布・ベイズ 出生数 ~ N(15,473, 17,155²) かを正規性検定で評価 scipy.stats, statsmodels, PyMC
プログラミング Python / R / SQL / Spark / Git SSDSE 564 行を pandas で前処理 → DuckDB に格納 → dbt で集計 pandas, polars, DuckDB, dbt
ドメイン知識 人口学・公衆衛生・自治体行政 「合計特殊出生率」「TFR」「DID 人口」等の指標の意味理解 国勢調査ハンドブック, OECD Family DB
+ コミュニケーション 可視化・物語化・意思決定者への翻訳 Tableau 1 枚で「人口減 → 税収減 → サービス縮退」のストーリー Tableau, PowerBI, matplotlib
このコードでやること :上記 4 軸のうち「統計 」+「プログラミング 」+「ドメイン 」を同時に使い、 SSDSE-B-2026 で「人口減少率と出生数減少率の Pearson 相関」を計算する。 ドメイン知識として「総人口 A1101」と「出生数 A4101」を使うのは「人口規模は出生の基盤」という事前知識に基づく。
📥 入力データ:
2012-2023 年の 47 都道府県 × 12 年 = 564 行
Code, Year, A1101 (総人口), A4101 (出生数)
集計: 県ごとに 2012→2023 の変化率を計算
例: 北海道 A1101 5,465,000→5,092,000 (-6.8%)
A4101 38,686→24,430 (-36.9%)
📋 コピー from scipy.stats import pearsonr
# 県ごとに 2012 と 2023 のセットを横に並べる
piv = df . pivot ( index = 'Code' , columns = 'Year' , values = [ 'A1101' , 'A4101' ])
pop_change = ( piv [ 'A1101' ][ 2023 ] - piv [ 'A1101' ][ 2012 ]) / piv [ 'A1101' ][ 2012 ]
birth_change = ( piv [ 'A4101' ][ 2023 ] - piv [ 'A4101' ][ 2012 ]) / piv [ 'A4101' ][ 2012 ]
mask = pop_change . notna () & birth_change . notna () & ( piv . index != 'R00000' )
r , p = pearsonr ( pop_change [ mask ], birth_change [ mask ])
print ( f '人口変化率 vs 出生数変化率: r = { r : .3f } , p = { p : .4f } ' )
print ( f '分析対象県数: { mask . sum () } ' )
📤 実行例:
人口変化率 vs 出生数変化率: r = 0.805, p = 0.0000
分析対象県数: 47
💬 結果の読み方 : 11 年で r=0.805 (p<0.001) という強い正の相関 → 「人口が減った県ほど出生数も減っている」が統計的に確認される。 ただし 逆は真ならず (出生数が減ると将来の人口減が加速する経路もある)で因果は一方向には決められない。 ここで「ドメイン知識」が必要: 人口学では「若年人口の規模が出生数の主要決定因 」とされるので「人口規模 → 出生数」の方向の説明が自然、 と判断する。
🎭 似ている職種との違い — DS / DA / DE / ML / MLOps
役割 主目的 主な成果物 主要ツール 必要数学度 (1-5)
データアナリスト (DA) 過去の解釈・KPI モニタリング ダッシュボード, レポート SQL, Excel, Tableau ★★☆☆☆
データサイエンティスト (DS) 未来予測・因果推論・仮説検証 モデル, A/B 実験, 論文 Python, R, Jupyter ★★★★☆
機械学習エンジニア (MLE) モデルの本番化・大規模学習 推論 API, モデル CI/CD PyTorch, TF Serving, Kubeflow ★★★★★
データエンジニア (DE) データ基盤の構築・運用 ETL/ELT パイプライン, DWH Airflow, dbt, Spark, Snowflake ★★★☆☆
MLOps エンジニア モデルの監視・再学習・GitOps 監視ダッシュ, ドリフト検出 MLflow, Evidently, Argo ★★★☆☆
BI エンジニア 事業現場への可視化提供 ダッシュ, セルフ BI 環境 Looker, PowerBI, Metabase ★★☆☆☆
リサーチ DS 学術寄り・新規アルゴリズム研究 論文, ベンチマーク JAX, PyMC, Stan ★★★★★
DS は「過去の説明 (DA) と未来の意思決定 (MLE) 」のブリッジ。 「DA は事実、 DS は意味、 MLE は仕組み」と覚えると区別しやすい。 SSDSE-B-2026 で言えば、 DA は「2023 年 47 県の人口・出生数の表」を作る人、 DS は「2030 年に 5,000 人を切る県を予測する人」、 MLE は「その予測を毎月自動更新する API を作る人」。
🔄 CRISP-DM 各フェーズの「やる/やらない」チェックリスト
各フェーズで 失敗の典型 と 回避策 をテンプレ化した。 SSDSE-B-2026 を題材にしているが、 全業界共通。 「次のフェーズに進める判断基準」も付した。
フェーズ 必須成果物 失敗パターン 次フェーズ判定
Business SMART な KPI (例: 出生数予測 RMSE < 1,000) 「とりあえず ML やってみたい」 意思決定者の Yes
Data Understanding プロファイル報告 (欠損 / 分布 / 相関) describe() だけ見て次へ行く 仮説 ≥3 件
Data Preparation クレンジング後 CSV + Lineage notebook 内で破壊的編集 再現可能性 OK
Modeling 候補 ≥3 モデル + CV スコア 単一モデル + train 評価のみ test score > ベースライン
Evaluation 業務 KPI への翻訳 + 残差分析 R² = 0.85 だけ報告 業務 KPI 達成
Deployment API / ダッシュ + 監視 + 退役計画 「pickle で渡して終わり」 2 週運用で再学習トリガなし
🐍 全フェーズを一気通貫する小フレームワーク
このコードでやること :CRISP-DM の Business→Data→Prep→Model→Eval を 1 つの関数 に圧縮し、 SSDSE-B-2026 で実行する。 「業務 KPI = 出生数予測 RMSE < 1,500 」を達成するかチェックする最小サンプル。
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 A1101(総人口) A4101(出生数) A5101(転入者数(日本人移動者)) A5102(転出者数(日本人移動者))
北海道 5,092,000 24,430 47,388 52,915
東京都 14,086,000 86,348 406,749 348,260
沖縄県 1,468,000 12,549 26,410 27,054
…(全 47 行)
📋 コピー 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import cross_val_score , cross_val_predict
import pandas as pd , numpy as np
def ds_pipeline ( csv_path , target = 'A4101' , features = [ 'A1101' , 'A5101' , 'A5102' ],
kpi_rmse = 1500 ):
# 1. Data Understanding
df = pd . read_csv ( csv_path , encoding = 'cp932' , skiprows = [ 1 ])
df . columns = [ 'Year' ] + list ( df . columns [ 1 :])
d = df [( df [ 'Year' ] == 2023 ) & ( df [ 'Code' ] != 'R00000' )]
print ( 'Step1 Profile:' , d . shape , '欠損数:' , d [ features + [ target ]] . isna () . sum () . sum ())
# 2. Data Preparation: 対数化
Xlog = np . log1p ( d [ features ] . values )
ylog = np . log1p ( d [ target ] . values )
# 3. Modeling
rmse_log = - cross_val_score ( RandomForestRegressor ( n_estimators = 300 , random_state = 42 ),
Xlog , ylog , cv = 5 , scoring = 'neg_root_mean_squared_error' ) . mean ()
# 4. Evaluation: 対数CV予測を元スケールへ逆変換して RMSE を算出
pred = np . expm1 ( cross_val_predict ( RandomForestRegressor ( n_estimators = 300 , random_state = 42 ), Xlog , ylog , cv = 5 ))
rmse_orig = np . sqrt ( np . mean (( d [ target ] . values - pred ) ** 2 ))
pass_kpi = rmse_orig < kpi_rmse
return dict ( rmse_log = round ( float ( rmse_log ), 3 ), rmse_orig = round ( float ( rmse_orig ), 1 ), pass_kpi = bool ( pass_kpi ))
r = ds_pipeline ( 'data/raw/SSDSE-B-2026.csv' )
print ( r )
📤 実行例:
Step1 Profile: (47, 112) 欠損数: 0
{'rmse_log': 0.16, 'rmse_orig': 6245.8, 'pass_kpi': False}
💬 結果の読み方 : RandomForest + 対数化 + 5-fold CV。 対数スケールの CV RMSE は約 0.16 だが、 予測値を np.expm1 で 元スケール(人数)へ逆変換してから RMSE を測り直すと ≈ 6,246 。 これは業務 KPI 「RMSE < 1,500」を 未達 (pass_kpi=False) で、 Modeling フェーズに戻り LightGBM・Stacking・特徴量追加を試す判断になる。 なお「対数 RMSE をそのまま人数へ換算する」素朴な式((expm1(rmse_log)-1)*mean)は数学的に破綻して負値を返すため、 必ず予測値を逆変換してから元スケールで誤差を測る のが正しい。 CRISP-DM の循環性 がコード上に現れている(数値は RF・sklearn のバージョンで多少変動する環境依存)。
🗺 データサイエンスの 4 ステップを図解する
EDA → 仮説 → モデル → 評価の循環を、 SVG で 1 枚に圧縮します。 「現場で次に何をすべきかを地図的に確認する」 ための図解です。
時計回りで回り続ける構造です。 ④ の評価結果が ① の次の EDA に戻り、 新しい特徴量や分析対象を生む。 ここを 1 回で終わらせず最低 3 周回す のが実務的データサイエンスです。
EDA で必ず見る 8 つの観点
# 観点 確認するもの SSDSE-B での例
1 欠損 NaN, 0, -1 の混在 非掲載項目は空欄、 0 は実値
2 分布形状 正規/対数/二峰 A1101 人口は対数正規
3 外れ値 東京・大阪等の極端値 東京の人口 14M
4 相関 多重共線性 A1101 と A4101 は r=0.99
5 時間変化 過年度比較 SSDSE 各年で差分取得
6 地理性 都道府県ブロック 北海道/沖縄は別扱い
7 スケール 単位、 桁数 人口(万人)vs 出生数(人)
8 カテゴリ 順序 vs 名義 都道府県は名義
仮説生成の 7 つのアンチパターン
後付け解釈 (HARKing) :結果を見てから仮説を立てる → 偽陽性が爆増。 必ず分析前に仮説を文章化。
相関 = 因果と誤読 :相関 r=0.99 でも因果でない例多数 (人口と出生数は人口が主因だが、 暑さとアイス消費は気温が主因)。
サブグループ漁り :「東日本だけ」「人口 100 万以上だけ」と切り出して p < 0.05 を探す。 多重検定補正必須。
因果方向の混同 :「出生数が多いから人口が多い」も「人口が多いから出生数が多い」も両方ありうる。 ドメイン知識で固定。
過剰モデリング :47 サンプルに 30 特徴量 → 必ず過学習。 特徴量は √n 以下が目安。
ベースライン無視 :「線形回帰 R^2 = 0.97 すごい!」 → 単に y の分散の 97% が x で説明できるだけ。 平均値モデルとの比較を必ず添える。
サンプルサイズ過信 :47 都道府県は母集団に近く、 推測統計の前提を満たさない場合がある(外部一般化に注意)。
モデル選択ロードマップ (SSDSE-B 想定)
状況 第一選択 第二選択 避けるべき
説明変数 1 つ、 線形そう OLS 単回帰 Theil-Sen (頑健) NN, 木モデル (過剰)
説明変数 5-10、 多重共線性あり Ridge PCA + OLS OLS (係数不安定)
説明変数 20+、 疎 Lasso Elastic Net OLS (n < p で破綻)
非線形、 交互作用多い 勾配ブースティング RandomForest OLS (過小適合)
二値分類 (合格/不合格) ロジスティック SVM 線形回帰 (確率になっていない)
時系列 (年次推移) ARIMA / 状態空間 線形回帰 + lag 独立性仮定モデル
クラスタリング k-means 階層クラスタ 距離未スケーリング
評価指標の選び方
タスク 主指標 副指標 選ぶ理由
回帰 RMSE R^2, MAE 誤差が元単位で読みやすい
二値分類 (バランス) F1 AUC, Accuracy 適合率 / 再現率の調和
二値分類 (不均衡) PR-AUC F1, Recall ROC は楽観的になる
多クラス macro-F1 Accuracy 少数クラスを公平に
ランキング NDCG MAP, MRR 順位重みで評価
クラスタリング Silhouette Calinski-Harabasz 正解ラベル不要
実務 Tips 30 連発
EDA を 1 行 1 行コメント付きで .ipynb に残す
seed を固定 (np.random.seed=42)、 ただし生成データ禁止 → 公開データで再現性確保
SSDSE-B はメタ行 (skiprows=[1]) を必ず飛ばす
encoding='utf-8' を明示
都道府県コード R47000 で並び順を固定
差分 (diff) と比率 (pct_change) を両方計算
箱ひげ + ストリッププロットで分布と個別点を同時表示
相関は Pearson と Spearman を必ず併記
多重共線性は VIF > 10 を警告ライン
線形回帰の前に必ず散布図を見る
残差 vs 予測値プロットで均一分散を確認
QQ プロットで正規性を視覚的に確認
影響度は Cook's D で測る
交差検証は KFold(shuffle=True, random_state=42)
train_test_split は stratify を忘れない (分類タスク)
標準化は train だけで fit、 test には transform のみ
木モデルは標準化不要、 線形系は必須
カテゴリ変数は OneHotEncoder (drop='first')
ハイパーパラメータは GridSearchCV → Optuna
過学習チェックは learning_curve
特徴量重要度は permutation_importance がベター
解釈には SHAP を使う
異常値検出は IsolationForest が出発点
クラスタ数は エルボー法 + シルエット
時系列は train が過去、 test が未来になるよう分割
pickle ではなく joblib でモデル保存
カラム名は ascii_snake_case に統一
pandas は dtype を必ず明示
本番投入前に shadow A/B test
結果はステークホルダーが 30 秒で理解できる図 1 枚にする
練習問題 (SSDSE-B-2026 を使う)
A1101 (人口) と A4101 (出生数) の対数変換を行い、 Pearson 相関が変わるか確認せよ。
東京都を除外したサブセットで単回帰を fit し、 β₁ がどれだけ変わるか確認せよ。
A1101 (総人口), A5101 (転入者数), A5102 (転出者数) を説明変数として A4101 (出生数) を予測する重回帰モデルを作り、 R^2 と VIF を報告せよ。
47 都道府県を k-means (k=3) でクラスタリングし、 各クラスタの代表都道府県を 3 つ挙げよ。
箱ひげ図で A1101 の分布を地方ブロック別 (北海道 / 東北 / 関東 ...) に描き、 中央値の差が有意か Kruskal-Wallis で検定せよ。
データサイエンス vs 統計学 vs 機械学習 vs AI
用語が氾濫しがちなので、 SSDSE-B の文脈で再整理します。
分野 主目的 典型ツール SSDSE-B での例
記述統計 データを要約する 平均, 中央値, SD, 箱ひげ 47 都道府県の人口分布表示
推測統計 母集団を推定する t 検定, 信頼区間 地方ブロック間の平均差検定
機械学習 未知データを予測する OLS, Ridge, XGBoost 人口から出生数を予測
データサイエンス 意思決定に繋げる EDA + ML + 可視化 + 報告 人口減少策の根拠提示
AI 知的振る舞いを実装 NN, LLM, 強化学習 都道府県紹介テキスト自動生成
データサイエンスは 「統計・ML を意思決定に繋ぐパイプラインを作る職能」 と覚えると、 上記の境界が分かります。 たとえば SSDSE-B-2026 を用いて「人口減少が出生数にどう影響するか」 を答える場合、 統計学は人口減少率の平均と分散を推定し、 機械学習は予測モデルを作り、 データサイエンスは「だから政策 X に予算をいくら配分すべきか」 まで踏み込みます。 AI は「自治体ごとの状況に合わせた提案テキスト生成」 を担います。 一連の橋渡しを担うのがデータサイエンスです。
データサイエンスの「品質ゲート」 6 段階
現場でデータサイエンス成果物をリリースする際の品質ゲートを 6 段階で整理します。 SSDSE-B のような公的データでも同じ枠組みが使えます。
段階 名称 合格条件 不合格時の対応
G1 データ品質 欠損率 < 5%, dtype 一致 欠損補完 / 型変換
G2 EDA 完了 図 10 枚以上、 主要分布把握 追加 EDA
G3 ベースライン 平均値 / 線形回帰の指標確定 baseline モデル追加
G4 本命モデル CV で baseline を 10%+ 改善 特徴量 / モデル変更
G5 ロバストネス 外れ値 / 異常時にエラー無し 例外処理追加
G6 ステークホルダー OK 意思決定者が結論を理解 図 / 文章作り直し
データサイエンス・コンペ参加の Tips
SSDSE-B-2026 と統計・データ解析コンペティションの文脈における 12 の Tips。
初手は単純な可視化と相関行列で全体感をつかむ。 凝った手法は終盤。
地域ブロック (北海道 / 東北 / 関東 / 中部 / 近畿 / 中国 / 四国 / 九州沖縄) で群別比較すると新しい仮説が出やすい。
SSDSE-B-2026 の各年版を結合した「年×都道府県」 のロングフォーマットも検討する。
人口は対数変換、 比率は logit 変換 が分布を整える定石。
「人口 1 万人あたり」 に変換すると都道府県間で公平に比較できる。
結果を述べる時は必ず「絶対値・比率・順位」 の 3 視点で説明する。
東京・大阪・愛知の 3 大都市圏は別グループ扱いにすることが多い。
過年度比較を入れることで時系列的な発見が得られる。
因果関係を主張するなら DAG (directed acyclic graph) を必ず添える。
機械学習モデルを使うなら、 SHAP 値で寄与の可視化を必ず行う。
論文・スライドでは「事実 → 解釈 → 提案」 の 3 段論法で書く。
査読対策として、 反例 (counter-example) を 1 つ自分で挙げて反論しておく。
データサイエンスを学ぶ最短ルート
初心者が 3 ヶ月でデータサイエンスを実務レベルにする学習計画 (1 日 1 時間想定):
週 テーマ 到達点
1-2 Python 基礎 pandas / numpy / matplotlib 操作
3-4 EDA SSDSE-B で 30 枚の図作成
5-6 記述統計 + 推測統計 t 検定・カイ二乗・回帰の式が書ける
7-8 機械学習基礎 OLS, Ridge, ロジスティック, 木モデル
9-10 モデル評価 CV, グリッドサーチ, 学習曲線
11-12 解釈と報告 SHAP, 図表作成, レポート執筆
SSDSE-B-2026 はこの全期間を貫いて使える題材です。
プロジェクト・テンプレ (CRISP-DM 風)
フェーズ 目的 成果物
1 ビジネス理解 問題を 1 文で書く 問題ステートメント.md
2 データ理解 EDA レポート eda.ipynb + 図 10 枚
3 データ準備 クレンジング、 特徴量 data/processed/*.csv
4 モデリング 複数モデルを比較 models/cv_results.csv
5 評価 本番想定で再評価 evaluation_report.pdf
6 展開 API / バッチ / レポート app.py または deploy/
SSDSE-B-2026 を題材にこのテンプレを 1 通り回せば、 「データサイエンスを実践した」 と言える最低ラインに到達します。
可視化の追加コード例 (matplotlib)
EDA の中心は可視化。 4 つの定番図を 1 つずつ実装します。
このコードでやること :人口の対数ヒストグラム + KDE を描き、 分布形状を確認する。
📥 入力データ:df の A1101。
📋 コピー import matplotlib.pyplot as plt
import seaborn as sns
sns . histplot ( np . log10 ( df [ 'A1101' ]), kde = True )
plt . xlabel ( 'log10(population)' )
plt . title ( 'SSDSE-B-2026 population distribution' )
plt . savefig ( 'fig_pop_hist.png' , dpi = 150 )
📤 実行例:
[fig_pop_hist.png 出力。 log10 で見ると正規分布に近い 1 山形状]
💬 対数変換でほぼ単峰の正規型 → 「人口は対数正規分布」 が定量的根拠付きで確認できる。
理解度チェック Q&A
Q 選択肢 正解 解説
① EDA で最初にすべきは? (a) モデル fit (b) df.describe() (c) 図を 30 枚描く (b) 数値概要 → ヒストグラム → 散布図の順
② Pearson と Spearman の差が大きい時は? (a) 線形だが外れ値あり (b) 非線形単調 (c) 完全独立 (b) 順位は単調を見るので非線形でも高い
③ 47 都道府県で 30 特徴量を使うと? (a) 高精度 (b) 過学習 (c) 何も起こらない (b) n << 2p で過学習リスク大
④ R^2 = 0.99 でも疑うべき理由は? (a) ベースライン未確認 (b) 単位エラー (c) 両方ある (c) 常識的予測との比較必要
⑤ 残差正規性が棄却されたら? (a) 即廃棄 (b) 反省 → 変換/外れ値除外 (c) 無視 (b) サイクルを回して改善
🔗 隣接手法への橋渡し
「データサイエンス」は単独で完結する手法ではなく、 隣接領域と連携することで真価を発揮する。 具体的には次の 3 方向と密接につながる:
データサイエンスは統計・ML・ドメイン知識を統合し、 社会的価値に変換する横断的職能。
🌳 手法選択フロー
「データサイエンス」を実際に使うとき、 何をどう選ぶかを順に判断する。 上から順に答えていくと、 使うべき手法と評価の仕方が決まる。
答えたい問いは何か 「何が起きたか」を知りたいのか、 「なぜ起きたか」なのか、 「次に何が起きるか」なのか。 記述・因果・予測で必要な手法も検証の仕方も別物になる。 ここを曖昧にしたまま進めない。
そのデータで答えられるか 欲しい変数が測られていない、 期間が足りない、 集計単位が合わない、 のいずれかなら手法を変えても答えは出ない。 データを足すか、 問いのほうを測れる形に直す。
結論は誰が何に使うのか 意思決定に使うなら、 不確実性(信頼区間)と限界を必ず添える。 探索が目的なら、 有意性より仮説の数を出すほうが役に立つ。
再現できる形になっているか データの版・前処理・乱数の種・ライブラリの版を残す。 半年後の自分が同じ図を出せないなら、 それは結論ではなく感想になる。
データサイエンスは手法の集合ではなく、 「問い → データ → 手法 → 検証 → 伝達」の一連の作業。 手法選びで悩むときは、 たいてい問いの立て方が曖昧なことが原因。
🧭 解説深化:同じデータ・同じ問い・答えは 6 通り — 「分析者の自由度」
最後に、 本ページの他の章でも姉妹ページでも扱っていない角度から「データサイエンスとは何か」をもう一段深掘りします。 テーマは分析者の自由度(researcher degrees of freedom) 。 データサイエンスの結論は「データ」だけから機械的に出てくるのではなく、 指標の定義・標本の範囲・外れ値の扱いといった分析者の選択 に強く依存します。 この事実を、 SSDSE-B-2026 の実測値で体感するのが本節の目的です。
🎨 直感 — 分析は一本道ではなく「分岐の庭」
CRISP-DM のような工程図(上の「📐 定義・数式」参照)は一本のレールに見えますが、 実際の各工程は選択の分岐 だらけです。 具体的な問いで試してみましょう:「結婚が多い地域ほど、 子どもが生まれるのか? 」。 SSDSE-B-2026(2023 年・47 都道府県)で、 指標の定義(3 択)× 標本の範囲(2 択) というたった 2 つの分岐を動かすだけで、 ピアソン相関係数 r は次のように変わります(すべて実測値)。
指標の定義 全 47 都道府県 東京都を除く 46
絶対数:婚姻件数 × 出生数 r = +0.991 r = +0.997
人口千人当たり:婚姻率 × 出生率 r = +0.667 r = +0.743
出生力:婚姻率 × 合計特殊出生率 r = −0.102 r = +0.104
出典:総務省統計局 SSDSE-B-2026、 2023 年度。 使用列は A9101(婚姻件数)・A4101(出生数)・A1101(総人口)・A4103(合計特殊出生率)。
同じデータ・同じ問いなのに、 答えは「ほぼ完全な正相関(+0.991)」から「ほぼ無相関でわずかに負(−0.102)」まで振れます。 どの分岐にもそれなりの言い分があるのがポイントで、 これを心理学者 A. Gelman は「分岐の庭(garden of forking paths) 」と呼びました。 下のパネルで分岐を自分で切り替えて、 結論の変わり方を確かめてください。
指標の定義: 絶対数 人口千対 婚姻率×TFR
標本の範囲: 全 47 都道府県 東京都を除く 46
r = +0.991
絶対数(婚姻件数 × 出生数) / 全 47 都道府県
−1 0 +1
分岐を切り替えると解説が表示されます。
※ 表示される r はすべて SSDSE-B-2026(2023 年)から事前計算した実測値で、 乱数やシミュレーションは使っていません。
⚠️ 落とし穴(重要)
規模の相関を「関係」と読む :絶対数の r=+0.991 は、 婚姻数も出生数も総人口に比例する ことの反映にすぎません。 「人口が多い県は何でも多い」という共通分母(交絡)による見かけの関連です(→ 疑似相関 ・交絡 )。 本ページの「悪いデータサイエンス」表 #2 の正規化はこの対処ですが、 正規化してもまだ分岐が残る (千対か TFR か)のが本節の追加ポイントです。
1 点が符号を握る :婚姻率×TFR の r は、 東京都を含めると −0.102、 除くと +0.104 と符号が反転 します。 婚姻率全国 1 位の東京都(人口千対 5.10)が TFR 最下位(0.99)で、 最下位の秋田県(婚姻率 2.52、 TFR 1.10)より低い、 という 1 点の影響です(→ 外れ値 )。 符号がこれほど壊れやすいこと自体が「実質的な関連はほぼ無い」というシグナルです。
都合の良い 1 本だけ報告する :6 通りのうち、 主張に合う r だけ見せるのはチェリーピッキングで、 意図せずやれば p-hacking と同型の誤りです。 総当たりで探索してから 1 本だけ報告する行為は多重検定 の偽陽性問題そのものです。
「どれが正しい分岐か」を統計に決めさせようとする :正解は問いの精密化が決めます。 「結婚件数 が出生数 をどれだけ説明するか」なら千対、 「結婚しやすさが出生力 を高めるか」なら TFR が対応します。 分岐の選択は統計技術ではなく問いの立て方 とドメイン知識 の仕事です。
🚀 発展 — 「全部の分岐を見せる」という解決策
近年のデータサイエンスでは、 分岐を隠すのではなく全分岐を機械的に走らせて結果の分布ごと報告する 方法論が広がっています。 多元宇宙分析(multiverse analysis) や仕様曲線分析(specification curve analysis) と呼ばれ、 「妥当な選択の組合せ全部で推定したとき、 結論はどれくらい頑健か」を示します(これらの用語ページは本用語集には未収録のため、 名称のみ紹介)。 事前に分析計画を固定する事前登録(preregistration) も同じ問題への処方箋です。 上の 6 通りは最小の多元宇宙で、 コードにするとループ 1 つです。
📥 入力例(SSDSE-B-2026 の 2023 年・47 都道府県から 3 行)
都道府県 A1101(総人口) A4101(出生数) A4103(合計特殊出生率) A9101(婚姻件数)
北海道 5,092,000 24,430 1.06 17,281
東京都 14,086,000 86,348 0.99 71,774
沖縄県 1,468,000 12,549 1.6 6,316
…(全 47 行)
📋 コピー
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 # 最小の「多元宇宙分析」: 指標3通り × 標本2通り = 6通りを全部report
import pandas as pd
df = pd . read_csv ( 'data/raw/SSDSE-B-2026.csv' , encoding = 'cp932' , skiprows = [ 1 ])
d = df [ df [ 'SSDSE-B-2026' ] == 2023 ] # 2023年・47都道府県
marr = d [ 'A9101' ] / d [ 'A1101' ] * 1000 # 婚姻率(人口千対)
defs = { '絶対数' : ( d [ 'A9101' ], d [ 'A4101' ]),
'人口千対' : ( marr , d [ 'A4101' ] / d [ 'A1101' ] * 1000 ),
'婚姻率xTFR' : ( marr , d [ 'A4103' ])}
no_tky = d [ 'Prefecture' ] != '東京都'
for name , ( x , y ) in defs . items ():
print ( f " { name } : 全47 r= { x . corr ( y ) : +.3f } "
f "東京除外 r= { x [ no_tky ] . corr ( y [ no_tky ]) : +.3f } " )
# 出力:
# 絶対数: 全47 r=+0.991 東京除外 r=+0.997
# 人口千対: 全47 r=+0.667 東京除外 r=+0.743
# 婚姻率xTFR: 全47 r=-0.102 東京除外 r=+0.104
レポートには「主分析はどの分岐か」「他の分岐でどう変わるか」を 1 行ずつ添えるだけで、 分析の信頼性は大きく上がります。 これは本ページの「📝 レポートでの報告」の作法を、 感度分析(sensitivity analysis)として一歩進めた形 です(感度分析の単独ページは未収録)。
🔗 関連ページ