STEP 37:ABC分析(パレート分析)

📊 STEP 37: ABC分析(パレート分析)

パレートの法則で重点管理すべき項目を特定しよう

📋 このステップで学ぶこと

  • パレートの法則(80:20の法則)の本質
  • ABC分類の基準と判断方法
  • 在庫管理への応用と最適化
  • 顧客管理への応用と施策
  • PythonとExcelでの実装
  • よくある間違いと対策

学習時間の目安: 2.5時間

📌 前のステップとのつながり

STEP 36(トレンド分析と予測精度の評価)では、予測の精度を評価する方法を学びました。

このSTEP 37では、「何を重点的に管理すべきか」を決める手法を学びます。
予測精度を高めるべき商品の優先順位付けにも、ABC分析は役立ちます。

次のSTEP 38(在庫最適化)では、ABC分析の結果を活かして
具体的な在庫量の最適化を行います。

🔍 1. パレートの法則とは

なぜパレートの法則を学ぶのか?

💡 限られたリソースを最大限に活かすため
よくある問題:
・100商品すべてを同じように管理している
・200人の顧客に同じ対応をしている
・すべてのタスクを同じ優先度で処理している

結果:
・リソースが分散して効果が出ない
・重要な商品が欠品する
・VIP顧客が離脱する

解決策: ABC分析
重要な少数に注力することで、
少ない労力で大きな成果を得られる!

80:20の法則(パレートの法則)

📌 少数が全体の大部分を占める経験則

イタリアの経済学者ヴィルフレド・パレートが発見

ビジネスでの例:
・売上の80%は、上位20%の商品から生まれる
・利益の80%は、上位20%の顧客がもたらす
・クレームの80%は、20%の原因から来る

在庫管理での例:
・在庫金額の80%は、20%の品目が占める
・出荷量の80%は、20%の商品で占められる

その他の例:
・ウェブアクセスの80%は、20%のページに集中
・バグの80%は、20%のコードに存在
・仕事の成果の80%は、20%の時間で生まれる

重要な気づき:
すべてを均等に扱うのではなく、
重要な少数に注力すべき!

ABC分類の基準

⚠️ 重要度に応じて3つのグループに分類
分類 累積比率 構成比 管理レベル
A(超重要) 0〜70% 約10〜20% 厳密管理(毎日)
B(重要) 70〜90% 約20〜30% 定期管理(週次)
C(普通) 90〜100% 約50〜70% 簡易管理(月次)
分類の目的:
限られたリソース(時間・人・お金)を最も効果的に配分する!

📊 2. ABC分析の実装

分析の手順

📌 ABC分析の5ステップ
ステップ1: データを売上(金額)の降順にソート
ステップ2: 累積売上を計算
ステップ3: 累積比率を計算(累積売上 ÷ 総売上 × 100)
ステップ4: 累積比率に基づいてABC分類
ステップ5: 分類別の集計と可視化

Pythonでの完全実装

# ============================================ # ABC分析の完全実装 # ============================================ import pandas as pd import numpy as np import matplotlib.pyplot as plt # サンプルデータ: 商品別売上(パレート分布) np.random.seed(42) n_products = 100 product_ids = [f’商品{i:03d}’ for i in range(1, n_products + 1)] # パレート分布で売上を生成 sales = np.random.pareto(a=1.5, size=n_products) * 100 + 50 sales = np.sort(sales)[::-1] # 降順にソート df = pd.DataFrame({ ‘商品ID’: product_ids, ‘売上’: sales }) # ============================================ # ABC分析の実行 # ============================================ # 1. 売上の降順にソート df = df.sort_values(‘売上’, ascending=False).reset_index(drop=True) # 2. 累積売上を計算 df[‘累積売上’] = df[‘売上’].cumsum() # 3. 累積比率を計算 total_sales = df[‘売上’].sum() df[‘累積比率’] = df[‘累積売上’] / total_sales * 100 # 4. ABC分類 def classify_abc(cumulative_ratio): “””累積比率に基づいてABC分類””” if cumulative_ratio <= 70: return 'A' elif cumulative_ratio <= 90: return 'B' else: return 'C' df['分類'] = df['累積比率'].apply(classify_abc) # 5. 各分類の集計 summary = df.groupby('分類').agg({ '商品ID': 'count', '売上': 'sum' }).rename(columns={'商品ID': '商品数'}) summary['商品数比率'] = summary['商品数'] / len(df) * 100 summary['売上比率'] = summary['売上'] / total_sales * 100 # 結果表示 print("=" * 50) print("【ABC分析結果】") print("=" * 50) print() print(summary.round(1)) print() # パレートの法則の確認 a_products = summary.loc['A', '商品数比率'] a_sales = summary.loc['A', '売上比率'] print(f"【パレートの法則の確認】") print(f"上位 {a_products:.0f}% の商品が、売上の {a_sales:.0f}% を占める") print() # 詳細表示(各分類の上位5商品) for category in ['A', 'B', 'C']: print(f"【{category}ランク商品(上位5件)】") print(df[df['分類'] == category].head().to_string(index=False)) print() # ============================================ # パレート図の作成 # ============================================ fig, axes = plt.subplots(2, 2, figsize=(14, 10)) # 1. パレート図(メイン) ax1 = axes[0, 0] x = np.arange(len(df)) # 棒グラフ(個別売上) colors_bar = df['分類'].map({'A': '#ff6b6b', 'B': '#ffd93d', 'C': '#6bcb77'}) ax1.bar(x, df['売上'], color=colors_bar, alpha=0.7, width=1.0) # 折れ線(累積比率) ax1_twin = ax1.twinx() ax1_twin.plot(x, df['累積比率'], color='navy', linewidth=2.5, label='累積比率') # 境界線 ax1_twin.axhline(y=70, color='red', linestyle='--', linewidth=1.5, label='A-B境界(70%)') ax1_twin.axhline(y=90, color='orange', linestyle='--', linewidth=1.5, label='B-C境界(90%)') ax1.set_xlabel('商品(売上順)', fontsize=11) ax1.set_ylabel('売上(万円)', fontsize=11) ax1_twin.set_ylabel('累積比率(%)', fontsize=11) ax1.set_title('パレート図', fontsize=13, fontweight='bold') ax1_twin.legend(loc='center right') ax1.grid(alpha=0.3, axis='y') # 2. ABC分類別の商品数比率 ax2 = axes[0, 1] colors_pie = ['#ff6b6b', '#ffd93d', '#6bcb77'] wedges, texts, autotexts = ax2.pie( summary['商品数'], labels=['A(超重要)', 'B(重要)', 'C(普通)'], autopct='%1.1f%%', colors=colors_pie, startangle=90, explode=(0.05, 0, 0) ) for autotext in autotexts: autotext.set_fontweight('bold') autotext.set_fontsize(11) ax2.set_title('ABC分類別 商品数比率', fontsize=13, fontweight='bold') # 3. ABC分類別の売上比率 ax3 = axes[1, 0] wedges, texts, autotexts = ax3.pie( summary['売上'], labels=['A(超重要)', 'B(重要)', 'C(普通)'], autopct='%1.1f%%', colors=colors_pie, startangle=90, explode=(0.05, 0, 0) ) for autotext in autotexts: autotext.set_fontweight('bold') autotext.set_fontsize(11) ax3.set_title('ABC分類別 売上比率', fontsize=13, fontweight='bold') # 4. 商品数 vs 売上の比較 ax4 = axes[1, 1] x_pos = np.arange(3) width = 0.35 bars1 = ax4.bar(x_pos - width/2, summary['商品数比率'], width, label='商品数比率', color='steelblue', alpha=0.7) bars2 = ax4.bar(x_pos + width/2, summary['売上比率'], width, label='売上比率', color='coral', alpha=0.7) ax4.set_xlabel('分類', fontsize=11) ax4.set_ylabel('比率(%)', fontsize=11) ax4.set_title('商品数 vs 売上の比較', fontsize=13, fontweight='bold') ax4.set_xticks(x_pos) ax4.set_xticklabels(['A', 'B', 'C']) ax4.legend() ax4.grid(axis='y', alpha=0.3) # 値を表示 for bars in [bars1, bars2]: for bar in bars: height = bar.get_height() ax4.text(bar.get_x() + bar.get_width()/2., height + 1, f'{height:.1f}%', ha='center', va='bottom', fontsize=10) plt.tight_layout() plt.savefig('abc_analysis.png', dpi=150, bbox_inches='tight') plt.show() print("→ グラフを 'abc_analysis.png' に保存しました")

Excelでの実装手順

💡 Excelで ABC分析を行う手順
データの準備:
A列: 商品ID
B列: 売上

手順 操作
1. 降順ソート B列で降順にソート
(データ → ソート → 降順)
2. 累積売上 C2: =B2
C3: =C2+B3(下にコピー)
3. 累積比率 D2: =C2/SUM($B$2:$B$101)*100(下にコピー)
4. ABC分類 E2: =IF(D2<=70,"A",IF(D2<=90,"B","C"))
5. パレート図 挿入 → グラフ → 組み合わせ
棒グラフ+折れ線(第2軸)

🎯 3. 在庫管理への応用

ABC分類別の在庫管理方針

⚠️ 分類別に異なる管理方針を設定
項目 Aランク Bランク Cランク
在庫チェック 毎日 週1回 月1回
安全在庫 多め 適正 最小限
発注方式 定点発注 定期発注 まとめ発注
需要予測 詳細分析 標準分析 簡易推定
欠品対応 即日対応 翌日対応 次回発注時

在庫分析の実装

# ============================================ # 在庫管理へのABC分析応用 # ============================================ # 在庫データの追加 df_inventory = df.copy() df_inventory['在庫金額'] = df_inventory['売上'] * np.random.uniform(0.3, 0.5, len(df)) df_inventory['在庫回転率'] = df_inventory['売上'] / df_inventory['在庫金額'] # ABC分類別の在庫管理指標 inventory_summary = df_inventory.groupby('分類').agg({ '商品ID': 'count', '売上': 'sum', '在庫金額': 'sum', '在庫回転率': 'mean' }).rename(columns={'商品ID': '商品数'}) inventory_summary['平均売上'] = inventory_summary['売上'] / inventory_summary['商品数'] inventory_summary['平均在庫'] = inventory_summary['在庫金額'] / inventory_summary['商品数'] print("=" * 50) print("【在庫管理指標(ABC別)】") print("=" * 50) print() print(inventory_summary.round(2)) print() # 在庫最適化の提案 print("=" * 50) print("【在庫最適化の提案】") print("=" * 50) print() for category in ['A', 'B', 'C']: data = inventory_summary.loc[category] print(f"■ {category}ランク商品") print(f" 商品数: {data['商品数']:.0f}点") print(f" 売上合計: {data['売上']:.1f}万円") print(f" 在庫金額: {data['在庫金額']:.1f}万円") print(f" 在庫回転率: {data['在庫回転率']:.1f}回/年") if category == 'A': print(" → 【厳格管理】欠品厳禁、安全在庫多め") elif category == 'B': print(" → 【標準管理】定期発注、適正在庫維持") else: print(" → 【簡易管理】在庫削減、SKU整理検討") print() # ============================================ # 在庫分析の可視化 # ============================================ fig, axes = plt.subplots(1, 3, figsize=(15, 5)) colors = ['#ff6b6b', '#ffd93d', '#6bcb77'] # 1. ABC別 売上 vs 在庫金額 ax1 = axes[0] x_pos = np.arange(3) width = 0.35 bars1 = ax1.bar(x_pos - width/2, inventory_summary['売上'], width, label='売上', color='steelblue', alpha=0.7) bars2 = ax1.bar(x_pos + width/2, inventory_summary['在庫金額'], width, label='在庫金額', color='coral', alpha=0.7) ax1.set_xlabel('分類', fontsize=12) ax1.set_ylabel('金額(万円)', fontsize=12) ax1.set_title('売上 vs 在庫金額', fontsize=13, fontweight='bold') ax1.set_xticks(x_pos) ax1.set_xticklabels(['A', 'B', 'C']) ax1.legend() ax1.grid(axis='y', alpha=0.3) # 2. ABC別 在庫回転率 ax2 = axes[1] bars = ax2.bar(['A', 'B', 'C'], inventory_summary['在庫回転率'], color=colors, alpha=0.8, edgecolor='black') ax2.set_xlabel('分類', fontsize=12) ax2.set_ylabel('在庫回転率(回/年)', fontsize=12) ax2.set_title('在庫回転率の比較', fontsize=13, fontweight='bold') ax2.grid(axis='y', alpha=0.3) for bar in bars: height = bar.get_height() ax2.text(bar.get_x() + bar.get_width()/2., height + 0.1, f'{height:.1f}', ha='center', va='bottom', fontsize=11, fontweight='bold') # 3. 在庫効率マトリクス ax3 = axes[2] for i, category in enumerate(['A', 'B', 'C']): data = inventory_summary.loc[category] ax3.scatter(data['売上'], data['在庫金額'], s=data['商品数'] * 20, c=colors[i], label=f'{category}ランク', alpha=0.7, edgecolors='black') ax3.set_xlabel('売上合計(万円)', fontsize=12) ax3.set_ylabel('在庫金額(万円)', fontsize=12) ax3.set_title('在庫効率マトリクス\n(円の大きさ=商品数)', fontsize=13, fontweight='bold') ax3.legend() ax3.grid(alpha=0.3) plt.tight_layout() plt.savefig('inventory_abc.png', dpi=150, bbox_inches='tight') plt.show() print("→ グラフを 'inventory_abc.png' に保存しました")

👥 4. 顧客管理への応用

顧客ABC分類の目的

💡 顧客をABC分類して優先度をつける
顧客ABC分析の目的:
・優良顧客(VIP)の特定
・リソースの最適配分
・顧客別マーケティング戦略

分類 特徴 施策
A顧客(VIP) 売上の70%
全顧客の約10〜20%
専任担当、月次訪問
特別割引、VIPイベント
B顧客(重要) 売上の20%
全顧客の約20〜30%
四半期フォロー
A顧客への育成プログラム
C顧客(一般) 売上の10%
全顧客の約50〜70%
メール/SNS対応
効率化・自動化

顧客分析の実装

# ============================================ # 顧客ABC分析 # ============================================ # 顧客データ生成 n_customers = 200 customer_ids = [f'顧客{i:04d}' for i in range(1, n_customers + 1)] customer_sales = np.random.pareto(a=2, size=n_customers) * 50 + 10 customer_sales = np.sort(customer_sales)[::-1] df_customer = pd.DataFrame({ '顧客ID': customer_ids, '年間売上': customer_sales }) # ABC分類 df_customer = df_customer.sort_values('年間売上', ascending=False).reset_index(drop=True) df_customer['累積売上'] = df_customer['年間売上'].cumsum() total_customer_sales = df_customer['年間売上'].sum() df_customer['累積比率'] = df_customer['累積売上'] / total_customer_sales * 100 df_customer['分類'] = df_customer['累積比率'].apply(classify_abc) # 集計 customer_summary = df_customer.groupby('分類').agg({ '顧客ID': 'count', '年間売上': ['sum', 'mean'] }).round(1) customer_summary.columns = ['顧客数', '売上合計', '平均売上'] customer_summary['顧客数比率'] = customer_summary['顧客数'] / len(df_customer) * 100 customer_summary['売上比率'] = customer_summary['売上合計'] / total_customer_sales * 100 print("=" * 50) print("【顧客ABC分析結果】") print("=" * 50) print() print(customer_summary.round(1)) print() # 具体的な施策提案 print("=" * 50) print("【顧客別マーケティング戦略】") print("=" * 50) print() strategies = { 'A': { 'label': 'VIP', 'actions': ['専任営業担当', '月次訪問', '特別割引 15%', 'VIP限定イベント', 'カスタマイズサービス'] }, 'B': { 'label': '重要', 'actions': ['四半期フォロー', '標準割引 10%', '一般イベント招待', 'A顧客への育成プログラム'] }, 'C': { 'label': '一般', 'actions': ['メール/SNSでの対応', '標準サービスのみ', '効率化・自動化', '購買頻度確認'] } } for category in ['A', 'B', 'C']: count = customer_summary.loc[category, '顧客数'] sales = customer_summary.loc[category, '売上比率'] avg = customer_summary.loc[category, '平均売上'] strategy = strategies[category] print(f"■ {category}顧客({strategy['label']})") print(f" {count:.0f}名(売上の{sales:.1f}%、平均{avg:.1f}万円/年)") print(" 施策:") for action in strategy['actions']: print(f" ・{action}") print() # ============================================ # 顧客分析の可視化 # ============================================ fig, axes = plt.subplots(1, 2, figsize=(12, 5)) # 1. 顧客のパレート図 ax1 = axes[0] x = np.arange(len(df_customer)) colors_bar = df_customer['分類'].map({'A': '#ff6b6b', 'B': '#ffd93d', 'C': '#6bcb77'}) ax1.bar(x, df_customer['年間売上'], color=colors_bar, alpha=0.7, width=1.0) ax1_twin = ax1.twinx() ax1_twin.plot(x, df_customer['累積比率'], color='navy', linewidth=2) ax1_twin.axhline(y=70, color='red', linestyle='--', alpha=0.7) ax1_twin.axhline(y=90, color='orange', linestyle='--', alpha=0.7) ax1.set_xlabel('顧客(売上順)', fontsize=11) ax1.set_ylabel('年間売上(万円)', fontsize=11) ax1_twin.set_ylabel('累積比率(%)', fontsize=11) ax1.set_title('顧客パレート図', fontsize=13, fontweight='bold') ax1.grid(alpha=0.3, axis='y') # 2. 顧客数 vs 売上比率 ax2 = axes[1] x_pos = np.arange(3) width = 0.35 bars1 = ax2.bar(x_pos - width/2, customer_summary['顧客数比率'], width, label='顧客数比率', color='steelblue', alpha=0.7) bars2 = ax2.bar(x_pos + width/2, customer_summary['売上比率'], width, label='売上比率', color='coral', alpha=0.7) ax2.set_xlabel('分類', fontsize=11) ax2.set_ylabel('比率(%)', fontsize=11) ax2.set_title('顧客数 vs 売上の比較', fontsize=13, fontweight='bold') ax2.set_xticks(x_pos) ax2.set_xticklabels(['A(VIP)', 'B(重要)', 'C(一般)']) ax2.legend() ax2.grid(axis='y', alpha=0.3) for bars in [bars1, bars2]: for bar in bars: height = bar.get_height() ax2.text(bar.get_x() + bar.get_width()/2., height + 1, f'{height:.1f}%', ha='center', va='bottom', fontsize=10) plt.tight_layout() plt.savefig('customer_abc.png', dpi=150, bbox_inches='tight') plt.show() print("→ グラフを 'customer_abc.png' に保存しました")

⚠️ 5. よくある間違いと対策

間違い1: C商品/顧客を軽視しすぎる

⚠️ Cランクにも価値がある!
問題:
・C商品をすべて廃止
・C顧客へのサービスを完全停止

見落としている価値:
・今はCでも将来Aになる可能性(新商品、新規顧客)
・A商品とセットで購入される
・品揃えの充実による顧客満足
・C顧客の口コミによる新規獲得

対策:
切り捨てではなく「効率的に管理」する
定期的にB→A、C→Bへの昇格を確認

間違い2: 一度分類したら更新しない

📌 ABC分類は定期的に見直す
問題:
・1年前のABC分類をそのまま使用
・市場環境が変わっても対応しない

推奨更新頻度:
・変動激しい業界: 月次
・一般的な業界: 四半期
・安定した業界: 半年〜年次

チェックポイント:
・A→B、B→Cへの降格
・C→B、B→Aへの昇格
・急激なランク変動の原因分析

間違い3: 売上だけで分類する

💡 利益やポテンシャルも考慮する
売上だけの問題:
・売上は高いが利益率が低い商品
・売上は低いが利益率が高い商品
・将来性のある新商品が無視される

多軸ABC分析:
・売上 × 利益率
・売上 × 成長率
・顧客数 × 購買頻度

例: 売上-利益マトリクス
・売上A × 利益A → 最優先
・売上A × 利益C → 利益改善が必要
・売上C × 利益A → 販売促進の余地あり

📝 STEP 37 のまとめ

✅ このステップで学んだこと
  • パレートの法則: 80:20の法則(少数が大部分を占める)
  • ABC分類: 累積比率で3グループに分類(70%/90%境界)
  • 在庫管理: 分類別の管理レベル設定と最適化
  • 顧客管理: VIP顧客の特定と育成戦略
  • 実装: PythonとExcelでの分析とパレート図作成
📌 次のステップへの準備

STEP 38(在庫最適化)では、ABC分析の結果を活用して
具体的な発注点、安全在庫、発注量の計算方法を学びます。

このSTEPで学んだ「何を重点管理すべきか」という判断が、
次のSTEPでの「どれくらい在庫を持つべきか」の基礎になります。

💡 ABC分析の実務活用ポイント

重要な少数に注力することで効率アップ!

1. リソース配分の最適化
・A: 手厚く管理(70%のリソース)
・B: 標準管理(20%のリソース)
・C: 簡易管理(10%のリソース)

2. 在庫管理での効果
・A商品: 欠品防止 → 機会損失削減
・C商品: 在庫削減 → コスト削減

3. 顧客管理での効果
・A顧客: 満足度向上 → 離脱防止
・B顧客: A顧客への育成

ABC分析は、シンプルだけど強力!
すぐに実務で活用できます!

📝 練習問題

問題 1 基礎

10商品の売上データが以下の通りです。
ABC分析を行い、各商品を分類してください。

商品A: 500万円、商品B: 300万円、商品C: 200万円
商品D: 150万円、商品E: 100万円、商品F: 80万円
商品G: 70万円、商品H: 50万円、商品I: 30万円、商品J: 20万円

分類基準: A: 累積70%まで、B: 累積90%まで、C: それ以降

【解答】
1. 合計売上の計算
合計 = 500 + 300 + 200 + 150 + 100 + 80 + 70 + 50 + 30 + 20 = 1,500万円

2. 累積比率の計算

商品 売上 累積売上 累積比率 分類
A 500 500 33.3% A
B 300 800 53.3% A
C 200 1000 66.7% A
D 150 1150 76.7% B
E 100 1250 83.3% B
F 80 1330 88.7% B
G 70 1400 93.3% C
H〜J 100 1500 100% C

分類結果:
Aランク: 商品A、B、C(3点、30%)→ 売上66.7%
Bランク: 商品D、E、F(3点、30%)→ 売上22.0%
Cランク: 商品G、H、I、J(4点、40%)→ 売上11.3%

→ 上位30%の商品が売上の67%を占める(パレートの法則!)
問題 2 応用

在庫管理担当者として、以下の状況で在庫削減計画を立ててください。

現状:
・Aランク商品(10点): 在庫回転率 8回/年、在庫金額 1,000万円
・Bランク商品(30点): 在庫回転率 6回/年、在庫金額 500万円
・Cランク商品(60点): 在庫回転率 2回/年、在庫金額 500万円

目標: 総在庫金額を20%削減(2,000万円 → 1,600万円)

【解答】Cランク商品の在庫を大幅削減すべき
理由:

1. 在庫回転率が低い
・Cランク: 2回/年(半年に1回しか売れない)
・Aランク: 8回/年(1.5ヶ月に1回売れる)
→ Cランクは資金効率が悪い

2. 売上への影響が小さい
・Cランクは売上の10%程度
・削減しても影響は限定的

削減計画:
・Aランク: 0%削減 → 1,000万円(欠品リスク回避)
・Bランク: 10%削減 → 450万円
・Cランク: 50%削減 → 250万円
→ 合計: 1,700万円(15%削減)

追加施策(20%達成のため):
・CランクSKUを60点→40点に削減
・売れないC商品は受注生産に移行
→ 合計: 1,600万円(20%削減達成)
問題 3 応用

顧客ABC分析の結果、以下のことが判明しました。

・A顧客(20名): 年間売上 7,000万円
・B顧客(50名): 年間売上 2,000万円
・C顧客(130名): 年間売上 1,000万円

営業担当者5名で、月間100時間の営業時間があります。
ABC分類に基づいた時間配分を提案してください。

【解答】売上貢献度に応じた時間配分
現状分析:
・A顧客: 20名で売上70%(1名あたり350万円/年)
・B顧客: 50名で売上20%(1名あたり40万円/年)
・C顧客: 130名で売上10%(1名あたり7.7万円/年)

推奨時間配分:
・A顧客: 70時間/月(70%)
・B顧客: 20時間/月(20%)
・C顧客: 10時間/月(10%)

具体的な活動:

A顧客(70時間 ÷ 20名 = 3.5時間/名):
・月1回の訪問(2時間)
・電話/メールフォロー(1.5時間)
・担当: 専任5名で4名ずつ

B顧客(20時間 ÷ 50名 = 24分/名):
・四半期1回の訪問
・月1回の電話フォロー(10分)
・担当: 全員で分担

C顧客(10時間 ÷ 130名 = 4.6分/名):
・メール/ニュースレター中心
・問い合わせ対応のみ
・自動化ツール活用

期待効果:
・A顧客の離脱防止(売上維持)
・B顧客からA顧客への育成
・C顧客対応の効率化
問題 4 発展

売上だけでなく、利益率も考慮した多軸ABC分析を行いたいと考えています。

以下の4商品について、「売上ABC」と「利益率ABC」の2軸で分析し、
それぞれの商品に対する施策を提案してください。

商品P: 売上500万円、利益率30%
商品Q: 売上400万円、利益率5%
商品R: 売上50万円、利益率40%
商品S: 売上30万円、利益率8%

【解答】2軸ABC分析による戦略的施策
2軸分類:

商品 売上 売上ABC 利益率 利益率ABC 利益額
P 500万 A 30% A 150万
Q 400万 A 5% C 20万
R 50万 C 40% A 20万
S 30万 C 8% C 2.4万
施策提案:

商品P(売上A × 利益率A)→ 最優先!
・利益額150万円で最大貢献
・施策: 販促強化、在庫確保、拡販

商品Q(売上A × 利益率C)→ 利益改善!
・売上は高いが利益率が低い(5%)
・施策: コスト削減、値上げ検討、仕入先見直し
・改善されなければ縮小も検討

商品R(売上C × 利益率A)→ 拡販余地!
・利益率40%と高収益
・施策: マーケティング強化、認知度向上
・売上を伸ばせば大きな利益貢献

商品S(売上C × 利益率C)→ 見直し対象
・売上も利益率も低い
・施策: 廃止検討、または最小限の在庫で維持
・他商品とのセット販売での活用

❓ よくある質問

Q1: ABC分類の境界(70%、90%)は絶対ですか?
いいえ、業界や目的に応じて調整できます。

一般的な基準:
・A: 0〜70%(または80%)
・B: 70〜90%(または80〜95%)
・C: 90〜100%(または95〜100%)

厳しい基準(Aに集中):
・A: 0〜60%、B: 60〜85%、C: 85〜100%

緩い基準(より多くを重点管理):
・A: 0〜80%、B: 80〜95%、C: 95〜100%

推奨: まずは標準的な70%/90%で開始し、実務に合わせて調整
Q2: C商品/C顧客は切り捨てるべきですか?
いいえ、慎重に判断すべきです。

Cランクの隠れた価値:
・今はCでも将来Aになる可能性(新商品、新規顧客)
・A商品とセットで購入される
・品揃えの充実による顧客満足
・C顧客の口コミによる新規獲得

切り捨てを検討すべき場合:
・赤字の商品/顧客
・長期間動きがない
・管理コストが高すぎる

原則: 切り捨てではなく「効率的に管理」することが目的!
Q3: ABC分析はどのくらいの頻度で更新すべきですか?
四半期ごとの更新を推奨します。

更新頻度の目安:
・変動激しい業界(ファッション、IT): 月次
・一般的な業界(小売、製造): 四半期
・安定した業界(インフラ、公共): 半年〜年次

更新すべきタイミング:
・新商品投入時
・大型プロモーション後
・市場環境の大きな変化

チェックポイント:
・A→B、B→Cへの降格
・C→B、B→Aへの昇格
・急激なランク変動の原因分析
Q4: ABC分析以外に使える分類手法はありますか?
はい、目的に応じて他の手法も活用できます。

RFM分析(顧客分析向け):
・Recency(最終購買日)
・Frequency(購買頻度)
・Monetary(購買金額)
→ 3軸で顧客をセグメント化

VED分析(在庫管理向け):
・Vital(重要): なくてはならない
・Essential(必須): あった方がよい
・Desirable(望ましい): なくても困らない
→ 重要度で分類

FSN分析(在庫回転向け):
・Fast moving(回転が速い)
・Slow moving(回転が遅い)
・Non-moving(動きがない)
→ 在庫回転率で分類

組み合わせ:
ABC × VED、ABC × FSNなど多軸分析も効果的

📝

学習メモ

ビジネスデータ分析・意思決定 - Step 37

📋 過去のメモ一覧
#artnasekai #学習メモ
LINE