忍者ブログ
統計、機械学習、AIを学んでいきたいと思います。 お役に立てば幸いです。

【機械学習の知識】階層的クラスタリングの代表格「凝集型クラスタリング」の手順と仕組み

教師なし学習のクラスタリング手法において、事前にクラスタ数を決めずにデータの親子関係や木のつながりを視覚的に捉えられる「階層的クラスタリング」。その中でも最も一般的に使われる「凝集型(アグロメレーティブ)クラスタリング」の具体的な手順と仕組みを整理します。

1. 【 概要 】

凝集型クラスタリング(Agglomerative Hierarchical Clustering)とは、最初はすべてのデータ点がそれぞれ独立した「1つの小さなクラスタ」として存在している状態からスタートし、最も距離の近いペア同士を次々に合体させて大きなクラスタへと育てていくボトムアップ型の手法です。

データがどのようにまとまっていくかの過程(デンドログラムと呼ばれる樹形図)を可視化できるため、データの構造を直感的に深く理解できるのが大きなメリットです。


2. 【 基本手順(3つのステップ) 】

(1) すべてのデータ点ごとに独立したクラスタを作成する(100個なら100個)
(2) 空間内で最も距離が近い(類似している)クラスタ同士をグループ化して合体する
(3) 終了条件(指定したクラスタ数に達したか等)を確認し、満たしていなければ(2)に戻る

3. 整理:各ステップの具体的な処理内容

凝集型クラスタリングがどのようなロジックでグループを大きくしていくのか、ステップごとに詳しく見ていきましょう。

【 各プロセスの具体的な仕組み 】

・ステップ(1):初期状態の設定
データが100個あれば、最初は「100個のクラスタ(中身はデータが1つずつ)」が存在している状態から始まります。

・ステップ(2):一番近いペアの結合
すべてのクラスタ間の距離を計算し、最も距離が近い(類似度が高い)と判定された最も近接するペア同士を1つの大きなグループにまとめます。この時点でクラスタの総数は1つ減ります。

・ステップ(3):終了条件の確認とループ
「目的のクラスタ数(例: 3個)に到達したか」や「全てのデータが1つにまとまったか」という終了条件をチェックします。
条件を満たしていない場合は、新しくできたクラスタと他のクラスタとの距離を再計算し、ステップ(2)の結合処理を繰り返します。

4. 関連して押さえたい「クラスタ間の距離の測り方(連鎖基準)」

ステップ(2)において、「クラスタとクラスタの距離をどうやって測るのか?」という基準(リンク基準)には、いくつかの重要な選択肢があります。

・最遠隣法(Complete Linkage):クラスタ内の「最も遠いデータ同士」の距離をグループ間の距離とする。広がりのある綺麗な固まりになりやすい。
・最短隣法(Single Linkage):クラスタ内の「最も近いデータ同士」の距離をグループ間の距離とする。鎖状につながったデータ(チェーニング効果)を検出しやすい。
・群平均法(Average Linkage):クラスタ内のすべてのデータの組み合わせの「平均距離」を使う。バランスが良く実務でよく使われる。
・ウォード法(Ward's Method):結合したときに「分散の増加が最小になるペア」を選ぶ。丸っこいコンパクトなクラスタを作りやすい(Scikit-learnのデフォルト)。


5. 補足:Python(Scikit-learn)での実装コード例

Pythonで凝集型クラスタリングを実行し、樹形図(デンドログラム)を描く準備をする際の実装イメージです。
可読性の高いライトグレーの背景でまとめています。

# Scikit-learnのAgglomerativeClusteringを使う例
from sklearn.cluster import AgglomerativeClustering

# クラスタ数を3に指定し、ウォード法(ward)を用いてクラスタリング
agg_clustering = AgglomerativeClustering(n_clusters=3, metric='euclidean', linkage='ward')

# データの学習と各データへのクラスタ番号の割り当て
clusters = agg_clustering.fit_predict(X)

print(f"各データの割り当て結果: {clusters}")

# デンドログラム(樹形図)を描きたい場合は scipy.cluster.hierarchy を使用します

6. まとめ

凝集型クラスタリングは、「全データからスタートして、最も近いペア同士を合体させる」というボトムアップの原則を繰り返す非常に分かりやすいアルゴリズムです。
k-means法とは異なり事前のクラスタ数を厳密に決めなくても全体の系統図(デンドログラム)が描けるため、データの構造をじっくり探索したいときに強力な武器となります!


PR

【機械学習の知識】k-means法(k平均法)が持つ4つの限界と実務での注意点

教師なし学習の代表的なクラスタリング手法である「k-means法(k平均法)」。シンプルで高速にグループ分けができるため非常に人気ですが、万能ではありません。今回は、実務で必ず直面するk-means法の4つの大きな限界と、その対策を整理します。

1. 【 概要 】

k-means法とは、データを「k個」のグループ(クラスタ)に自動で分類するためのアルゴリズムです。

中心となる点(重心)を動かしながらグループ分けを行う非常にシンプルな仕組みですが、アルゴリズムの特性上、データの形状や初期条件によってはうまく分類できない「限界」が存在します。この制約を正しく理解しておくことが、精度の高い分析への第一歩となります。


2. 【 基本手順(k-means法の4つの限界) 】

(1) クラスタの個数(k)を人間が事前に決める必要がある
(2) 重心の初期設定がランダムで、実行のつどクラスタ結果が異なることがある
(3) データは「1つのクラスタのみ」にしか割り当てられない(ハードクラスタリング)
(4) 外れ値(ノイズ)に非常に敏感で、重心が大きく引っ張られてしまう

3. 整理:4つの限界の具体的な内容と影響

k-means法が抱える4つの弱点について、それぞれがどのような現象を引き起こすのか詳しく見ていきましょう。

【 各限界の仕組みとデメリット 】

・限界(1):クラスタ数を事前に決める必要性
データの中に本来いくつのグループがあるか分からない状態でも、人間が「k=3」のように最初に指定しなければなりません。不適切な数を指定すると、無理やりグループが分割されてしまいます。

・限界(2):初期値依存(ランダム性)
最初に置く重心の位置をランダムに決めるため、プログラムを実行するたびに分類結果や精度が微妙に変わってしまいます。運悪く悪い初期値を選ぶと、最適なグループ分けにたどり着けません。

・限界(3):単一クラスタへの割り当て(ハード)
すべてのデータは、必ずどれか1つのグループにスパッと割り当てられます。「Aグループに70%、Bグループに30%属する」といった曖昧さ(確率的な所属度)を表現できません。

・限界(4):外れ値への敏感さ
データ群から極端に離れた「外れ値」が存在すると、平均値を計算する重心がその外れ値の方向に大きく引っ張られてしまい、正しいクラスタの中心が狂ってしまいます。

4. 関連して押さえたい「限界を克服するための対策と代替手法」

前述したk-means法の弱点をカバーするために、実際の開発現場ではどのような工夫がされているのでしょうか?

・初期値のランダム性を解決する「K-means++」
初期の重心を適当にバラバラに置くのではなく、お互いの距離がなるべく離れるように賢く初期配置する「K-means++」というアルゴリズムが現在の標準(デフォルト)になっています。

• クラスタ数を決めるための「エルボー法(Elbow Method)」
kの数を変えながらエラーの減り方をグラフにし、肘(エルボー)のように折れ曲がる最適なポイントを視覚的に見つけるテクニックがよく使われます。

• 曖昧さを表現したいなら「混合ガウスモデル(GMM)」
データがどのクラスタに何%属しているかを確率で表現したい場合は、k-meansの代わりにソフトクラスタリングができるGMM(Gaussian Mixture Model)を採用します。


5. 補足:Python(Scikit-learn)での対策設定コード例

Pythonでk-meansを実行する際、初期値ランダム問題を解決する「K-means++」を明示的に指定したり、複数回試行してベストを選ぶコード例です。
可読性の高いライトグレーの背景でまとめています。

# Scikit-learnのKMeansを使う場合の例
from sklearn.cluster import KMeans

# init='k-means++' で賢い初期配置を指定(これがデフォルトです)
# n_init=10 で初期位置を変えて10回試行し、一番安定した結果を採用する
kmeans = KMeans(n_clusters=3, init='k-means++', n_init=10, random_state=42)

# モデルの学習とクラスタ割当ての実行
clusters = kmeans.fit_predict(X)

# 各クラスタの重心座標を確認
print(kmeans.cluster_centers_)

6. まとめ

k-means法は非常に強力でスピーディーな反面、「クラスタ数の事前指定」「ランダムな初期値によるブレ」「単一割り当て」「外れ値への弱さ」という4つの限界を持っています。
K-means++などの改良手法を取り入れたり、データの前段階で外れ値をしっかりクレンジングしたりする工夫を行い、それぞれの特徴を理解した上でスマートに使いこなしましょう!


【データマイニング】伝統的な標準プロセス「SEMMAメソッド」の5つのステップ

膨大なデータから価値ある知見を発見するデータマイニングのプロジェクトを成功させるには、行き当たりばったりではなく、体系化された標準的なプロセスに沿って進めることが不可欠です。今回は、SAS Instituteが提唱したデータマイニングの伝統的な手法論「SEMMAメソッド」の全体像を整理します。

1. 【 概要 】

SEMMAメソッドとは、データマイニングのプロジェクトを効率的かつ高品質に進めるための伝統的な5つの段階(プロセス)の総称です。

名称は、各ステップの頭文字である Sampling(サンプリング)、Exploration(探索)、Modification(修正)、Modeling(モデリング)、Assessment(評価) を繋ぎ合わせたものです。プロジェクトの全工程を迷わず進めるための羅針盤として広く活用されています。


2. 【 基本手順(5つのステップ) 】

(1) サンプリング(Sampling):膨大なデータから分析に適したサンプルを得る。
(2) 探索(Exploration):データを視覚化・統計量で確認し、関連や異常値を発見する。
(3) 修正(Modification):モデリングに向けてデータのクレンジングや変数変換を行う。
(4) モデリング(Modeling):最適なアウトプットを得るための予測モデルを構築する。
(5) アセット/評価(Assessment):有用性や信頼性の観点から構築したモデルを評価する。

3. 整理:各ステップの具体的な処理内容

SEMMAを構成する5つのステップが、実務でそれぞれどのような役割を持つのかを詳しく見ていきましょう。

【 各プロセスの具体的な中身 】

・ステップ(1):サンプリング(Sampling)
全データが巨大きすぎる場合や、計算コストを抑えたい場合に、母集団の傾向を正しく反映したサンプルデータを抽出します。データの質とサイズを最適化する最初の関門です。

・ステップ(2):探索(Exploration)
取得したデータをグラフ化したり基本統計量を出したりして、データの癖を深く理解します。
変数同士の隠れた相関関係や、予期せぬ異常値・外れ値をこの段階でいち早く発見します。

・ステップ(3):修正(Modification)
探索で見つかった問題点をクリアにするため、欠損値の穴埋め、異常値の除去、外れ値のクリッピング、新しい変数の生成(特徴量エンジニアリング)など、モデリングのためのデータ修正を行います。

・ステップ(4):モデリング(Modeling)
綺麗に整えられたデータに対し、機械学習アルゴリズム(決定木やニューラルネットワークなど)を適用し、目的とする予測や分類を行うためのモデルを実際にビルド(構築)します。

・ステップ(5):アセット(Assessment)
構築したモデルが「本当にビジネスで使える精度を持っているか」「過学習を起こしていないか」を、テストデータなどを用いて有用性・信頼性の観点から厳しく評価します。

4. 関連して押さえたい「CRISP-DMとの違い」

データマイニングの標準プロセスとして、SEMMAと並んで非常に有名なフレームワークに **「CRISP-DM(クリスプ・ディーエム)」** があります。

両者の最大の違いは「プロジェクト全体の視野の広さ」にあります。

CRISP-DMは、「ビジネスの課題定義」から始まり、「データの理解」「データの準備」「モデリング」「評価」、そして最終的な「展開(システム導入や実運用)」まで、ビジネスの文脈を含めた全6段階を網羅する包括的な枠組みです。

一方、SEMMAは、その中核となる「データを受け取ってから分析・モデル評価を行うまでの実務フェーズ(データ中心)」に特化しています。実務では、プロジェクト全体はCRISP-DMで管理し、分析の実作業はSEMMAのステップに沿って進めるといった使い分けがなされます。


5. 補足:SEMMAメソッドが現場で選ばれる理由

SEMMAメソッドが長年支持されてきた理由は、**「エンジニアやアナリストが次に何をすべきかが直感的に分かりやすい」**という点にあります。

データ分析の現場では、「データを取ってきたが、どう処理していいか分からない」「モデルを作ったはいいが、どこが悪いのか検証できていない」というボトルネックが頻発します。

「まずはサンプリングして、全体を探索し、データを修正してからモデルを作り、最後に評価する」という直線的かつ王道のフローを頭にインプットしておくことで、分析プロジェクトの品質とスピードを安定させることができます。


6. まとめ

データマイニングの伝統的な手法論である「SEMMAメソッド」。サンプリング、探索、修正、モデリング、評価という5つのステップを順番に踏むことで、データの迷子にならず確実に対象を分析・モデル化することができます。標準プロセスをしっかり体に染み込ませ、実務でのデータ分析力をさらに高めていきましょう!


【機械学習の知識】カテゴリ変数の主要エンコーディング手法の完全比較と使い分け

機械学習モデルや統計モデルは、文字データ(「赤・青・緑」や「東京・大阪」など)をそのまま計算することができません。そのため、カテゴリデータを数値に翻訳する「エンコーディング」が必須となります。今回は代表的な6つの手法の違いと、実務での選び方を徹底比較します。

1. 【 概要 】

カテゴリ変数のエンコーディングとは、質的なデータ(文字や属性)をコンピュータが計算できる量的なデータ(数値)に変換するプロセスです。

手法によって「作られる列の数」や「数値が持つ意味」が大きく異なります。特に「都道府県名」や「商品ID」のように種類(カテゴリ)が大量にあるデータをどう扱うかによって、モデルの精度が大きく変わるため、適切な手法の選択が重要になります。


2. 【 基本手順(6つの代表的な手法) 】

(1) One-Hotエンコーディング:全カテゴリに専用の列を作り、該当箇所を1、他を0にする。
(2) ダミーコーディング:K個のカテゴリに対し「K-1個」の列を作り、基準を1つ省略する。
(3) エフェクトコーディング:基準を-1、他を0や1で表現し、全体平均からの偏差を表す。
(4) 順序(Ordinal / Label)エンコーディング:カテゴリに「0, 1, 2...」と単純な整数を割り当てる。
(5) ターゲットエンコーディング:カテゴリを「そのグループの目的変数の平均値」に置き換える。
(6) 頻度(Frequency)エンコーディング:カテゴリを「出現回数(または割合)」に置き換える。

3. 整理:各エンコーディング手法の具体的な違い

6つの手法がそれぞれどのような構造を持ち、何が違うのかをステップごとに詳しく見ていきましょう。

【 各手法の仕組みと特徴 】

・手法(1):One-Hotエンコーディング
カテゴリが3つなら3つの列を作り、[1,0,0], [0,1,0], [0,0,1] で表現します。情報の欠落がありません。

・手法(2):ダミーコーディング
3つのうち1つを基準として削り、残り2つの列だけを作ります(多重共線性の回避)。

・手法(3):エフェクトコーディング
ダミーに似ていますが、基準を `-1` で表現します。全体平均に対する各グループの偏りを見たい統計モデル向けです。

・手法(4):順序(Ordinal / Label)エンコーディング
「低=1、中=2、高=3」のように整数に変換します。メモリを圧迫しませんが、アルゴリズムが「3は1の3倍の価値がある」と誤解するリスクがあります。

・手法(5):ターゲットエンコーディング(平均エンコーディング)
例えば「東京に住んでいる人の正解率(目的変数の平均)」のように、実績値で置き換えます。カテゴリ数が数千ある場合に非常に強力ですが、情報漏洩(リーク)に注意が必要です。

・手法(6):頻度(Frequency)エンコーディング
データ全体の中で「そのカテゴリが何回出現したか」の頻度数に置き換えます。珍しいカテゴリか、よくあるカテゴリかを数値化できます。

4. 関連して押さえたい「どれを使えばいいの?(実務での選び方)」

「手法が多すぎてどれを使えばいいか迷う」という場合の明確な選び方の基準を整理します。

・カテゴリ数が少ない(10未満)&決定木系モデルなら「One-Hot」
色や性別など、種類が少ないデータでLightGBMやランダムフォレストを使うならOne-Hotが最も安全です。

・カテゴリ数が膨大(数千〜数万)なら「ターゲットエンコーディング」や「頻度エンコーディング」
「郵便番号」や「商品ID」などをOne-Hotにすると列が爆発して破綻するため、ターゲットエンコーディングや頻度エンコーディングで1列に圧縮します。

・順序に意味があるデータなら「順序エンコーディング」
「満足度(低・中・高)」や「学歴(高卒・大卒・院卒)」など、大小関係に意味がある場合は整数に置き換える順序エンコーディングが最適です。

・本格的な統計・回帰分析なら「ダミーコーディング」
Pythonの `statsmodels` やRでp値を厳密に評価したい場合はダミーコーディングを選択します。


5. 補足:Pythonでの実装コード例

Pythonで代表的なエンコーディングを行う際の書き方イメージです。
可読性の高いライトグレーの背景でまとめています。

# 1. One-Hot(Pandas)
df_onehot = pd.get_dummies(df, columns=['fruit'])

# 2. 順序エンコーディング(Scikit-learn)
from sklearn.preprocessing import OrdinalEncoder
encoder = OrdinalEncoder()
df['size_encoded'] = encoder.fit_transform(df[['size']])

# 3. ターゲットエンコーディング(category_encodersライブラリ)
import category_encoders as ce
te = ce.TargetEncoder(cols=['city'])
df['city_te'] = te.fit_transform(df['city'], df['target'])

6. まとめ

カテゴリ変数のエンコーディングには、定番の「One-Hot」「ダミー」「エフェクト」に加え、カテゴリ数が多いときに無双する「ターゲット・頻度エンコーディング」、順序を保持する「順序エンコーディング」など多彩なアプローチがあります。
「データのカテゴリ数」と「使うモデルの種類」に合わせて最適な手法をチョイスし、機械学習モデルの予測性能を最大限に引き出せるようになりましょう!


【機械学習の知識】ピアソン相関係数の概要と読み解き方

2つのデータの関係性を分析する際、「一方が増えると、もう一方も増えるのか?」という関係性を数値で客観的に評価したい場面が多々あります。その最も代表的な指標が「ピアソン相関係数」です。今回はその意味と数値の読み解き方を整理します。

1. 【 概要 】

ピアソン相関係数とは、2つの変数が「どれだけ同じように変化するか(直線的な関係性があるか)」を表す統計指標です。

例えば、「気温とアイスクリームの売上」のように、一方が上がればもう一方も上がる関係にあるのか、あるいは全く無関係なのかを「数値」として客観的に判断するために用いられます。


2. 【 基本手順(数値の読み解きルール) 】

(1) 相関係数は、必ず `-1` から `1` までの値を取る
(2) 数値の「絶対値」が大きいほど、相関が強い(連動性が高い)
(3) 正の値(プラス)は、一方が大きくなれば他方も大きくなる「正の相関」
(4) 負の値(マイナス)は、一方が大きくなれば他方は小さくなる「負の相関」
(5) `0` に近い値は、2つの変数に関連性が見られない「無相関」

3. 整理:各状態の具体的な意味

相関係数の数値(プラス、マイナス、ゼロ)がそれぞれ何を意味しているのか、具体例を交えてステップごとに見ていきましょう。

【 各数値が示す具体的な状態 】

・状態(1):正の相関(値が 0 より大きく 1 に近い)
一方が増えると、もう一方も同じように増える関係です。
例:「気温」と「エアコンの電気代」、「勉強時間」と「テストの点数」など。

・状態(2):負の相関(値が 0 より小さく -1 に近い)
一方が増えると、もう一方は逆に減っていく関係です。
例:「商品の価格」と「売上数量」、「標高」と「気温」など。

・状態(3):無相関(値が 0 に近い)
一方の変化が、もう一方に全く影響を与えていない状態です。
例:「身長」と「テストの点数」、「靴のサイズ」と「年収」など。

・状態(4):絶対値と強さの目安
「0.7以上(または -0.7以下)」= 強い相関がある
「0.4〜0.7(または -0.4〜-0.7)」= 中程度の相関がある
「0.2以下(または -0.2以上)」= ほとんど相関がない

4. 関連して押さえたい「相関関係と因果関係の決定的な違い」

データ分析の現場で最も注意しなければならないのが、「相関関係があるからといって、因果関係があるとは限らない」という点です。

例えば、「アイスクリームの売上」と「水難事故の件数」のピアソン相関係数を計算すると、強い『正の相関(プラスの値)』が出ます。

しかし、「アイスを買うと溺れる(因果関係)」わけではありません。実際には「夏場で気温が高い」という第3の要因(潜伏変数)が、両方を同時に増加させているだけです。

相関係数はあくまで「数値が連動して動いているか」を示しているに過ぎず、「どちらかが原因で、どちらかが結果か」までは証明してくれません。分析の際は、数値だけで判断せず背景のロジックをしっかり考える必要があります。


5. 補足:Python(Pandas)での相関係数の出し方

実際のデータ分析(Python)で、ピアソン相関係数を一瞬で算出するコードの例です。
Pandasを使えば、全項目同士の相関係数を表(相関行列)にして確認できます。

# 2つの列のピアソン相関係数を計算(デフォルトがピアソンです)
df['気温'].corr(df['売上'])

# データフレーム全体の相関行列を出力
df.corr()

# 出力イメージ
# 気温と売上の相関係数が「0.85」なら、強い正の相関!

6. まとめ

データマイニングや機械学習の前処理で頻繁に使われる「ピアソン相関係数」。-1から1までの範囲をとり、プラスなら正の相関(共に増える)、マイナスなら負の相関(一方が増えると一方は減る)、絶対値が1に近いほど強い連動性を示すという基本ルールを押さえておきましょう。因果関係との違いに注意しながら、データ間の隠れたつながりを見つける強力な武器として活用してください!


        
  • 1
  • 2