K_DM Book
用語集
対象者 標準
対象者別の入口 →

対象者の設定はこのブラウザの中にだけ保存されます。

言語 JA

パレートチャートで主要要因を素早く特定

中級

06.7.17

パレートチャートで主要要因を素早く特定

最終更新 2020-09-09 読了時間 2 分
まとめ
パレートチャートは、カテゴリを件数の多い順に並べた棒グラフに、左から順に足し上げた累積比率の折れ線を右軸で重ね、「上位いくつで全体の 80% に達するか」を 1 枚で示す図です。不良原因や問い合わせ種別のように、少数の要因が大半を占める(80/20 の法則)かどうかを確かめ、対策の優先順位を決めるために使います。コードでは np.argsort(counts)[::-1] で降順に並べ替え、counts.cumsum() / counts.sum() で累積比率を作り、ax1.twinx() で右側に第 2 の Y 軸を足して折れ線を描きます。読み終えると、設定ミス・操作不明・バグの上位 3 カテゴリで累積 75%、4 つ目で 87% に達する構造を棒と折れ線から読み取り、自分の集計データで同じ図を作れるようになります。

直感 #

サポート窓口に月 378 件の問い合わせがあり、6 つのカテゴリに分類されているとします。件数の棒グラフだけでも多い順は分かりますが、「上位 3 つに対策すれば何割を減らせるか」は棒を足し算しないと答えられません。パレートチャートは棒を多い順に並べたうえで、左から足し上げた割合を折れ線で重ねます。折れ線が 80% の水平線を越える位置より左のカテゴリが「重要な少数」で、ここに集中すれば効率よく問い合わせ総数を減らせます。累積比率の折れ線が最初から急に立ち上がれば上位 2〜3 個の要因に集中している証拠、緩やかに伸びるなら要因が分散していて横断的な対策が必要だと読めます。

Python で描く #

次のコードは 6 カテゴリの件数を降順に並べ替え、左軸に棒、右軸に累積比率の折れ線を描きます。累積 80% に最初に達するカテゴリの位置に縦の点線を、80% の高さに横の破線を引きます。

 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
28
29
30
31
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter

categories = ["設定ミス", "操作不明", "バグ", "仕様質問", "連携エラー", "その他"]
counts = np.array([120, 95, 70, 45, 30, 18])
sorted_idx = np.argsort(counts)[::-1]
counts = counts[sorted_idx]
categories = [categories[i] for i in sorted_idx]

cumulative = counts.cumsum() / counts.sum()

fig, ax1 = plt.subplots(figsize=(6.4, 4))
ax1.bar(categories, counts, color="#38bdf8")
ax1.set_ylabel("件数")
ax1.set_title("問い合わせカテゴリのパレート分析")
ax1.grid(axis="y", alpha=0.2)

ax2 = ax1.twinx()
ax2.plot(categories, cumulative, color="#ef4444", marker="o")
ax2.set_ylabel("累積比率")
ax2.set_ylim(0, 1.05)
ax2.yaxis.set_major_formatter(FuncFormatter(lambda x, _: f"{x:.0%}"))

threshold = np.argmax(cumulative >= 0.8)
ax2.axhline(0.8, color="#475569", linestyle="--", linewidth=1)
ax1.axvline(threshold + 0.5, color="#475569", linestyle=":", linewidth=1)

fig.tight_layout()

plt.show()

棒グラフと累積折れ線を組み合わせ、80/20 ルールの分岐点を明確にしますの図

実行結果の読み方 #

棒の高さが各カテゴリの件数、赤い折れ線が左から足し上げた累積比率です。設定ミス(120 件、32%)、操作不明(95 件、累積 57%)、バグ(70 件、累積 75%)の 3 つで 4 分の 3 を占め、4 番目の仕様質問で折れ線が 80% の破線を越えて 87% に達します。縦の点線はその境目で、左側の 4 カテゴリに対策を集中すれば問い合わせの約 9 割に手が届くと読めます。折れ線の立ち上がりが急なほど少数の要因に集中していて、この例は典型的な 80/20 型です。

何が起きているか(ステップで見る) #

コードを読む前に、この手法が図の上で何をしているかを追ってみましょう。「再生」を押すか、スライダーを動かすと 1 手順ずつ進みます。

見るポイント:並べ替えと累積比率で「上位の少数が大半を占めるか」を確認する。

使いどころと落とし穴 #

パレートチャートは、品質管理の不良原因分析やサポートの問い合わせ分類のように、カテゴリ別の件数から「どこに手を打つか」を決める場面の定番です。要因どうしの相互作用や因果は表せません。原因の関係を掘るなら特性要因図(フィッシュボーン)を併用します。右軸の範囲を固定しないと 80% ラインの位置が図ごとにずれて読み誤るため、必ず set_ylim(0, 1.05) のように 0〜100% に揃えてください。カテゴリの粒度も結果を左右し、粗すぎる(「その他」が最大になる)と原因が特定できず、細かすぎる(30 カテゴリ)と棒が多くて読めなくなるので、対策を打てる単位に集約してから描きます。