AI × データ分析基礎知識集 / 類似度・距離

類似度・距離の指標と使い分け|コサイン類似度・ユークリッド距離・ジャッカード係数


コサイン類似度・ユークリッド距離・マンハッタン距離・ジャッカード係数は、データ分析でよく登場する「類似度・距離」の代表指標です。本記事では、ベクトルの「向き」を見るのか「距離」を見るのか、それとも「集合の重なり」を見るのかという視点で、4つの指標を初学者向けに図解で整理します。RAG・検索・重複検知・クラスタリングなど、実務での使い分けも合わせて扱います。

公開2026.05.15
最終更新2026.05.15
読了 12 分 / 約5,800字
この記事をシェアポスト
AI × データ分析データ同士の「近さ」を測る

類似度・距離の指標
の使い分け

類似度・距離の指標は、データ同士がどれくらい近いかを数値化するためのものです。テキスト埋め込みから RAG 検索を作るとき、ユーザーをクラスタリングするとき、重複コンテンツを検知するとき——どれも「2 つのデータが似ているかを判定する」場面で出てきます。

C
結論
「向き」「距離」「重なり」の3視点で使い分ける

類似度の指標は大きく 3 つの視点に分かれます。ベクトルの向きを見るならコサイン類似度、距離を見るならユークリッド/マンハッタン、集合同士の重なりを見るならジャッカード係数です。データの性質と目的で選び分けます。

01.まず結論:3つの視点で使い分ける

類似度・距離の指標は名前が紛らわしいですが、測っているものは大きく 3 種類に分けられます。

視点代表指標向くデータ
ベクトルの向きコサイン類似度テキスト埋め込み、TF-IDF など、ベクトル長が場面で変わるデータ
ベクトルの距離ユークリッド距離、マンハッタン距離数値の絶対差に意味があるデータ(座標、購買額など)
集合の重なりジャッカード係数タグ集合、キーワード集合、N-gram 集合など

02.ベクトルの「向き」で測る:コサイン類似度

コサイン類似度は、2 つのベクトルの間の角度を見る指標です。値は -1 〜 1 の範囲で、1 なら同じ向き(完全に類似)、0 なら直交(無関係)、-1 なら逆向き(反対の特徴)を意味します。

図:コサイン類似度はベクトルの「向き」を見る

ベクトルの長さは無視し、角度だけを見る。角度が小さいほど類似度が高い(1 に近い)。

似ている

cos ≒ 0.97

ABθ 小

意味の近い文書

無関係

cos ≒ 0

ABθ ≒ 90°

異なる話題

反対

cos ≒ -1

AB

対照的な特徴

ベクトルの長さは無視されるので、「短い文書と長い文書」のように大きさがバラバラなデータでも公平に比較できます。テキスト埋め込みを使った RAG・セマンティック検索・レコメンドの基本指標で、実装は sklearn.metrics.pairwise.cosine_similarity 1 行で済みます。ユーザー×アイテムの評価行列に使うと、協調フィルタリングの類似度計算にもそのまま使えます。

i
ベクトルが L2 正規化済みのとき
正規化済みなら、コサイン類似度と内積は同じ値になる

多くのテキスト埋め込み API(OpenAI、Voyage など)は出力ベクトルを L2 正規化して返します。その場合、コサイン類似度の代わりに内積(dot product)を計算しても結果は一致するため、検索エンジンは高速な内積でランキングするのが一般的です。

03.ベクトルの「距離」で測る:ユークリッド・マンハッタン

距離系の指標は、ベクトル同士の物理的な近さを測ります。コサイン類似度と違い、「ベクトルの大きさ」が値に影響します。

図:ユークリッド距離とマンハッタン距離の違い

A から B まで、ユークリッド距離は直線、マンハッタン距離は碁盤の目で測る。

AB
ユークリッド距離

(直線)

マンハッタン距離

(碁盤の目)

指標計算の考え方向く場面
ユークリッド距離2点を結ぶ直線の長さ。√(差の二乗和)座標、画像特徴、k-meansクラスタリングなど
マンハッタン距離縦・横の移動量の合計。Σ|差|外れ値の影響を抑えたいとき、軸が独立な意味を持つとき

ユークリッド距離は二乗するため、1 つの軸で大きく外れた値の影響を強く受けます。外れ値が多いデータではマンハッタン距離の方が安定することがあります。

04.集合の「重なり」で測る:ジャッカード係数

ジャッカード係数は、ベクトルではなく「集合」を比較するための指標です。共通部分の要素数を、和集合の要素数で割って計算します。値は 0 〜 1 の範囲で、0 は重なりなし、1 は完全一致を意味します。

図:ジャッカード係数は集合の重なりの割合

共通部分(A∩B)を全体(A∪B)で割った値。0 で重なりなし、1 で完全一致。

ABA ∩ B

ジャッカード係数

=
|A ∩ B||A ∪ B|

例:A={a,b,c,d}、B={c,d,e}
→ 共通{c,d} / 和{a,b,c,d,e}
→ 2/5 = 0.4

ジャッカード係数は、タグの一致度、検索キーワードの重複度、N-gram を使った重複コンテンツ検知、MinHash と組み合わせた大規模文書の近似重複検出などで使われます。「順序や頻度はどうでもよく、要素が含まれているかだけを比較したい」ときに向いています。

05.用途別の選び方

やりたいこと推奨指標ひとこと
テキスト埋め込みで「意味が似た文書」を検索したいコサイン類似度RAG・FAQ 検索の定番
ユーザーの行動ベクトルでクラスタリングしたいユークリッド距離k-means の標準距離
外れ値の影響を抑えてユーザーを比較したいマンハッタン距離二乗しない分、ロバスト
タグやキーワード集合の一致度を見たいジャッカード係数順序・頻度を無視できる
数千万件の文書から重複を高速に見つけたいジャッカード係数 + MinHash近似計算で計算量を削減
短い文と長い文を公平に比較したいコサイン類似度ベクトル長の影響を受けない
!
迷ったら
まずコサイン類似度を試し、合わないときに距離系へ

実務でテキスト系のデータを扱うなら、まずコサイン類似度を試すのが無難です。距離の絶対値に意味がある場面(座標、購買額、センサー値など)が出てきたら、ユークリッド距離・マンハッタン距離に切り替えます。タグ集合の比較に直面したらジャッカード係数の出番、と覚えておけば困りません。

06.実装例(scikit-learn)

どの指標も scikit-learn(または scipy)の関数 1 つで計算できます。最小限の例を載せておきます。

import numpy as np
from sklearn.metrics.pairwise import (
    cosine_similarity,
    euclidean_distances,
    manhattan_distances,
)
from sklearn.metrics import jaccard_score

a = np.array([[1, 2, 3]])
b = np.array([[2, 3, 4]])

cosine_similarity(a, b)     # コサイン類似度 → 約 0.9926
euclidean_distances(a, b)   # ユークリッド距離 → 約 1.732
manhattan_distances(a, b)   # マンハッタン距離 → 3.0

# ジャッカード係数(2 値ベクトルや集合の比較)
y1 = [1, 0, 1, 1]
y2 = [1, 1, 0, 1]
jaccard_score(y1, y2)       # → 0.5

ベクトル長がバラバラなテキスト埋め込み比較なら、コサイン類似度が定番。L2 正規化済みベクトルなら内積でも同じ結果になります。

上のコード(A=[1, 2, 3]、B=[2, 3, 4])と同じ値を、下のツールに読み込んであります。コサイン類似度・ユークリッド距離・マンハッタン距離を、コードを書かずにその場で確認できます。「集合」モードに切り替えると、タグ集合のジャッカード係数も計算できます。

類似度・距離の計算ツール
ツール単体ページで開く

数値ベクトルやタグ・単語を入力すると、コサイン類似度・距離・ジャッカード係数を、判定と図解つきでその場で計算します(ブラウザ内で計算、サーバー送信なし)。

2つの数値の並び(ベクトル)を入力すると、向きの近さ(コサイン類似度)と距離(ユークリッド・マンハッタン)をまとめて計算します。カンマ・空白・改行で区切り、A と B の個数は揃えてください。

読み取れた数値: 0個

読み取れた数値: 0個

07.よくある質問(FAQ)

コサイン類似度と内積は何が違いますか?

内積はベクトルの長さが結果に影響するのに対し、コサイン類似度はベクトルを長さ(ノルム)で割って正規化してから内積をとるため、長さの影響を受けません。多くのテキスト埋め込み API は L2 正規化済みベクトルを返すため、その場合は内積とコサイン類似度が一致します。検索エンジンは計算が軽い内積を採用することが多いです。

ユークリッド距離はそのままコサイン類似度に変換できますか?

L2 正規化済みベクトル同士であれば、ユークリッド距離 d とコサイン類似度 s には d² = 2(1 - s) の関係が成り立ちます。それ以外(長さがバラバラなベクトル)では単純に変換できないため、目的に合わせて指標自体を選び直す方が安全です。

ジャッカード係数とコサイン類似度はどちらがテキスト比較に向きますか?

意味の近さで比較したい場合は、テキストを埋め込みベクトルに変換してコサイン類似度を取るのが定番です。一方、「表記レベルでどれくらい単語が一致しているか」を見たいときはジャッカード係数が直感的です。重複コンテンツ検知では、ジャッカード係数(しばしば MinHash 近似と併用)が広く採用されています。

k-means クラスタリングで使うべき距離は?

標準の k-means はユークリッド距離(の二乗和)を最小化するアルゴリズムなので、ユークリッド距離で動かすのが自然です。テキスト埋め込みのように「向き」で類似を測りたい場合は、事前にベクトルを L2 正規化しておけば実質的にコサイン類似度ベースのクラスタリングになります。専用の Spherical k-means を使う選択肢もあります。

08.まとめ

類似度・距離の指標は、「ベクトルの向き(コサイン類似度)」「ベクトルの距離(ユークリッド/マンハッタン)」「集合の重なり(ジャッカード係数)」の 3 視点で整理すると迷いません。テキスト埋め込みでの検索ならコサイン類似度、座標や数値で似た点を探すならユークリッド距離、タグ集合の比較ならジャッカード係数が基本の選択肢です。

他の指標カテゴリ(一致度・予測モデル評価)は別の記事で詳しく扱っています。

お問い合わせ

検索・RAG・データ分析の評価設計をご相談ください

社内向けの検索・RAG・データクラスタリングなど、データの類似度を扱う仕組みの設計・評価支援を行っています。お気軽にお問い合わせください。

お問い合わせはこちら

データ分析・アルゴリズム 基礎知識集

一覧に戻る →
07

モデル構築の自動化

この記事をシェア
澤田 翔太(Shota Sawada)
この記事を書いた人

澤田 翔太

株式会社クリプタル 代表取締役

1988年生まれ、慶應義塾大学卒。創業メンバーとして関わった株式会社セールスサポートを株式会社ネオマーケティング(東証STD 4196)に売却。株式会社クリプタルでも複数の事業立ち上げと売却を経験し、2022年9月には婚活・恋愛メディア「シッテク」「婚活会議」を株式会社ベビーカレンダー(東証GRT 7363)へ売却。現在はAI業務支援事業、TANTOU事業、グロースハック支援事業、メディア事業、SEOコンサルティング事業を手がける。