品質管理担当者として、毎月こんな作業をしていませんか。不良記録のExcelをかき集めて、製品別・工程別に集計し直して、グラフをExcelで手作業で作って、報告資料にコピペして……。
「不良率 分析 python」で検索すると、機械学習による欠陥画像分類や統計モデルの話が多く出てきます。でも品質担当者が本当に必要としているのは、「今あるExcelの不良データを、もっと手間なく集計・グラフ化できる方法」ではないでしょうか。
この記事では、機械学習は扱いません。今あるExcel不良データをpandasで集計し、工程別グラフ・パレート図・要因別比較を自動生成する実践的な手順を解説します。読み終えた後には「月次品質レポートの手作業が減らせる」イメージが持てるはずです。
品質担当者がPythonで不良率分析をする前に知っておくこと
機械学習は不要──まず「集計・可視化・要因分解」から
「Pythonで不良分析」と聞くと、カメラ画像でAI検査するシステムや、統計モデルで欠陥を予測する仕組みを想像する方もいます。ただそれらは、相応のIoT環境とデータサイエンスの知識が前提です。
一方で、製造業の品質担当者がExcelで管理している不良記録(製品名・工程・不良数・要因・日付)は、すでにPythonで分析できる十分なデータです。機械学習が不要な場面でも、「集計・グラフ化・要因分解」だけでも、品質管理の見える化は大きく進みます。
今あるExcel不良データで何ができるか
- ①月次不良率の自動計算:検査数と不良数から不良率を自動計算してExcel出力
- ②工程別・製品別の不良率推移グラフ:折れ線グラフで月次トレンドを見える化
- ③要因別のパレート図:どの不良要因が多いかを優先順位で可視化
- ④時間帯・ロット別の不良傾向分析:「朝の1時間に不良が集中している」ような傾向把握
Pythonでできる不良率分析4パターン
1. 月次不良率(不良数÷検査数)を自動計算
まず基本から始めます。不良記録Excelに「検査数」と「不良数」の列があれば、以下のコードで月別・製品別の不良率が自動計算できます。
import pandas as pd
# 不良記録を読み込む
df = pd.read_excel("不良記録_2026.xlsx")
# 日付をdatetime型に変換して年月を追加
df["検査日"] = pd.to_datetime(df["検査日"])
df["年月"] = df["検査日"].dt.to_period("M")
# 製品別・月別に集計
monthly = df.groupby(["製品名", "年月"]).agg(
検査数=("検査数", "sum"),
不良数=("不良数", "sum")
).reset_index()
# 不良率を計算(%)
monthly["不良率(%)"] = (monthly["不良数"] / monthly["検査数"] * 100).round(2)
monthly.to_excel("月次不良率.xlsx", index=False)
print("不良率の集計が完了しました")
今まで月次の不良率集計にExcelで1〜2時間かかっていたとしたら、このスクリプトで数秒に短縮できます。製品数が多くても実行時間は変わりません。
2. 工程別・製品別の不良率推移をグラフ化
集計できた月次データを折れ線グラフで可視化します。「どの工程の不良率が上がってきているか」を一目でわかる形にします。
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family'] = 'Hiragino Sans'
# 特定工程の不良率推移を折れ線グラフで表示
target = monthly[monthly["製品名"] == "製品A"]
plt.figure(figsize=(10, 4))
plt.plot(target["年月"].astype(str), target["不良率(%)"], marker="o", color="steelblue")
plt.title("製品A 不良率推移(月次)")
plt.xlabel("年月")
plt.ylabel("不良率(%)")
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig("不良率推移_製品A.png", dpi=150)
print("グラフを保存しました")
「製品A」の部分を変えれば、任意の製品や工程のグラフに切り替えられます。毎月の品質会議に出すグラフを、手作業で作る必要がなくなります。
3. 要因別の不良件数をパレート図で可視化
パレート図は「どの不良要因が件数的に多いか」を棒グラフと累積折れ線で同時に表す品質管理の定番グラフです。「外観不良・寸法不良・機能不良のうち、どれが全体の80%を占めているか」を視覚化します。
# 要因別の件数を集計
factor = df.groupby("不良要因")["不良数"].sum().sort_values(ascending=False)
cumsum_pct = factor.cumsum() / factor.sum() * 100
fig, ax1 = plt.subplots(figsize=(10, 5))
ax1.bar(factor.index, factor.values, color="steelblue")
ax1.set_ylabel("不良件数")
ax2 = ax1.twinx()
ax2.plot(factor.index, cumsum_pct.values, color="tomato", marker="o")
ax2.axhline(80, color="gray", linestyle="--", linewidth=0.8)
ax2.set_ylabel("累積比率(%)")
plt.title("不良要因パレート図")
plt.tight_layout()
plt.savefig("パレート図.png", dpi=150)
print("パレート図を保存しました")
パレート図が自動生成できるようになると、品質会議の準備時間が大幅に短縮されます。「どの要因を優先的に対策すべきか」の議論を、データに基づいてすぐに始められます。
なお、Cpk(工程能力指数)や管理図を使ったPython品質管理については、別の記事で詳しく解説しています。→ 品質管理×Pythonの実践ガイド
4. 時間帯・ロット別の不良傾向を分解する
「朝の製造ロットに不良が多い」「夕方の時間帯に外観不良が集中している」——こういった傾向は、Excelの集計では見つけにくいです。pandasのgroupbyで「時間帯別」「ロット別」に集計することで、こうした傾向が数字で浮かび上がります。
# 時間帯別の不良集計(「時間帯」列がある場合)
hourly = df.groupby("時間帯")["不良数"].sum()
print(hourly.sort_values(ascending=False))
「感覚でわかっていたことが数字で確認できた」という発見が多いのが、このパターンの分析です。
よくある失敗パターン
失敗①:不良データの入力粒度がバラバラ
「外観不良」「外観」「見た目NG」が混在していると、要因別集計が正しくできません。Pythonで分析する前に、不良要因の選択肢をプルダウンで固定したExcel入力フォームを用意することが先決です。
失敗②:検査数が記録されていない
不良数だけが記録されていて検査数がない場合、不良率の計算ができません。「1日あたりの検査数」を記録する列を追加してからスクリプトを適用してください。
失敗③:日本語フォントが化けてグラフが表示されない
Windowsの場合は `matplotlib.rcParams[‘font.family’] = ‘MS Gothic’` に変更すると日本語が表示されます。Mac/Windowsの環境に合わせてフォント設定を変えてください。
品質管理Pythonをさらに深めるには
不良率の集計・グラフ化が動くようになったら、次は「月次品質レポートのPDF自動生成」や「製品ごとのCpk(工程能力指数)の自動計算」が視野に入ります。
Cpk・管理図を使った品質管理Pythonの実践については、こちらの記事で詳しく解説しています。
検査データの自動化については、こちらも参考になります。
まとめ
- 不良率分析のPythonは機械学習が不要。今あるExcelデータで集計・グラフ化から始められる
- できること4つ:①月次不良率計算②工程別推移グラフ③パレート図④時間帯・ロット別傾向分析
- パレート図の自動生成だけでも、品質会議の準備時間を大幅に削減できる
- 最初の壁は入力データの粒度不統一。不良要因の選択肢固定が先決
- Cpk・管理図の分析は別記事で。まず「集計・可視化」から手を動かす
「まず不良率を月別・製品別に自動計算するだけ」から始める。それが品質担当者のPython活用の現実的な最初の一歩です。