はじめに
パレートの法則というものがあります。80:20の法則とか呼ばれたりもします。
https://ja.wikipedia.org/wiki/%E3%83%91%E3%83%AC%E3%83%BC%E3%83%88%E3%81%AE%E6%B3%95%E5%89%87
このグラフをPythonで書きたいと思い、いろいろ模索しました。
要件
まず、以下を第一要件とします。
仕事の成果の8割は、費やした時間全体のうちの2割の時間で生み出している。(Wikipedia「パレートの法則」より)
これをグラフにするため、(20,80),(100,100)を通るようなグラフにしたいと思います。
べき分布・べき乗則
べき分布とかべき乗則とか呼ばれるものがあるそうです。
https://design.kyusan-u.ac.jp/OpenSquareJP/?Distribution
ここに書かれている以下の式
y=ax^(-k)+b
を使って(20,80),(100,100)を通るようなグラフを書ければよいのではないかと考えました。
プログラム
そうとわかればあとはPythonで書いてみるだけです。
#!/usr/bin/env python
# coding: utf-8
# matplotlibのインポート
import matplotlib.pyplot as plt
import japanize_matplotlib # <- 日本語の出力に必要
import numpy as np
# x座標は0.1単位で用意
x = np.linspace(0.1, 100, 1000)
# 単なる反比例
y1 = (-480) / (x) + 104
# グラフの設定
plt.plot(x, y1, label='反比例カーブ', color='blue')
plt.scatter(x_points, y_points, color='blue', marker='o')
plt.xlabel('費やした時間 (%)')
plt.ylabel('仕事の成果 (%)')
plt.title('工数と品質の関係')
plt.xticks(np.arange(0, 110, 10))
plt.yticks(np.arange(0, 120, 10))
plt.grid(True)
plt.xlim(0, 100)
plt.ylim(0, 100)
plt.legend(loc='lower right')
# グラフの表示
plt.show()
y=ax^(-k)+b の一番シンプルな式は k=-1、つまり反比例の式ですので、まずはそれでモデル化を試みました。
これは(20,80)を通り、(100,100)に近づきます。
おわりに
モデル自体が非常に単純なので、もっとモデル自体を見直して改善してみたいと思いました。
(おわり)