アルゴリズム

[Python] ベータ分布を計算してmatplotlibで描画する方法

ベータ分布は、確率変数が0から1の範囲にある場合に使用される連続確率分布です。

Pythonでは、scipy.statsモジュールのbetaクラスを使ってベータ分布を計算できます。

beta.pdf(x, a, b)で確率密度関数を計算し、matplotlibを使って描画します。

abはベータ分布の形状パラメータです。

numpyでx軸の値を生成し、matplotlib.pyplot.plot()で描画します。

ベータ分布とは何か

ベータ分布は、確率論と統計学において重要な連続確率分布の一つです。

主に区間 [0,1] に定義され、2つの形状パラメータ ab によってその形状が決まります。

ベータ分布は、特にベイズ推定やA/Bテストなどの実験データの分析において広く利用されており、成功確率や割合をモデル化するのに適しています。

例えば、成功確率が不明な場合に、観測データを基にその確率を推定する際に役立ちます。

ベータ分布は、形状が非常に柔軟で、さまざまな分布に適合できるため、実務において非常に有用です。

Pythonでベータ分布を計算する方法

scipy.statsモジュールのインポート

ベータ分布を計算するためには、まずscipyライブラリのstatsモジュールをインポートします。

以下のコードを使用してインポートできます。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import beta

beta.pdf()関数の使い方

beta.pdf()関数は、ベータ分布の確率密度関数(PDF)を計算するために使用されます。

この関数は、指定した値に対する確率密度を返します。

基本的な使い方は以下の通りです。

# 確率密度関数を計算する例
x = 0.5  # 計算したい点
a = 2    # パラメータ a
b = 5    # パラメータ b
pdf_value = beta.pdf(x, a, b)
print(pdf_value)  # 確率密度を出力

出力結果は以下のようになります。

0.9374999999999999

パラメータ ab の設定方法

ベータ分布の形状は、パラメータ ab によって決まります。

これらのパラメータは、分布の形を調整するために設定します。

例えば、a が大きいと分布は右に偏り、b が大きいと左に偏ります。

以下のように設定できます。

a = 2  # 成功の回数
b = 5  # 失敗の回数

ベータ分布の確率密度関数を計算する手順

  1. 必要なライブラリをインポートします。
  2. パラメータ ab を設定します。
  3. 計算したい点の配列を作成します。
  4. beta.pdf()関数を使用して確率密度を計算します。

以下は、具体的なサンプルコードです。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import beta
# パラメータの設定
a = 2
b = 5
# xの値を生成
x = np.linspace(0, 1, 100)
# 確率密度関数を計算
pdf_values = beta.pdf(x, a, b)
# 結果を表示
print(pdf_values)  # 確率密度の配列を出力

出力結果は以下のようになります。

[0.00000000e+00 2.90970918e-01 5.58550204e-01 8.03806416e-01 ... 0.00000000e+00]

この手順を通じて、ベータ分布の確率密度関数を計算することができます。

ベータ分布をmatplotlibで描画する方法

matplotlibのインポートと基本設定

ベータ分布を描画するためには、まずmatplotlibライブラリをインポートします。

以下のコードを使用してインポートし、基本的な設定を行います。

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import beta
# グラフのスタイルを設定
plt.style.use('seaborn')

x軸の値をnumpyで生成する方法

ベータ分布を描画するためには、x軸の値を生成する必要があります。

numpylinspace関数を使用して、0から1の範囲で均等に分布した値を生成します。

以下のコードで実行できます。

# xの値を生成
x = np.linspace(0, 1, 100)  # 0から1までの100点

beta.pdf()で計算した値をプロットする方法

生成したxの値を使って、beta.pdf()関数で確率密度を計算し、matplotlibを使ってプロットします。

以下のコードは、ベータ分布を描画する例です。

# パラメータの設定
a = 2
b = 5
# 確率密度関数を計算
pdf_values = beta.pdf(x, a, b)
# グラフを描画
plt.plot(x, pdf_values, label=f'Beta Distribution (a={a}, b={b})')
plt.xlabel('x')
plt.ylabel('Probability Density')
plt.title('Beta Distribution')
plt.legend()
plt.show()

グラフのカスタマイズ (タイトル、軸ラベル、凡例など)

グラフをより見やすくするために、タイトル、軸ラベル、凡例を追加します。

上記のコードでは、plt.title()plt.xlabel()plt.ylabel()plt.legend()を使用してカスタマイズしています。

これにより、グラフの情報が明確になります。

複数のベータ分布を同時に描画する方法

異なるパラメータを持つ複数のベータ分布を同時に描画することも可能です。

以下のコードでは、異なる ab の値を設定し、それぞれの分布を同じグラフに描画します。

# 複数のベータ分布を描画
plt.figure(figsize=(10, 6))
# パラメータの設定
params = [(2, 5), (5, 2), (3, 3)]
# 各ベータ分布をプロット
for a, b in params:
    pdf_values = beta.pdf(x, a, b)
    plt.plot(x, pdf_values, label=f'Beta Distribution (a={a}, b={b})')
# グラフのカスタマイズ
plt.xlabel('x')
plt.ylabel('Probability Density')
plt.title('Multiple Beta Distributions')
plt.legend()
plt.grid()
plt.show()

このコードを実行すると、異なる形状のベータ分布が同じグラフに描画され、比較が容易になります。

ベータ分布の応用例

ベイズ推定におけるベータ分布の利用

ベータ分布は、ベイズ推定において非常に重要な役割を果たします。

特に、成功確率が不明な場合に、観測データを基にその確率を推定する際に利用されます。

例えば、コイン投げの結果を考えた場合、コインが表が出る確率をベータ分布でモデル化することができます。

観測データ(表と裏の回数)をもとに、ベータ分布のパラメータを更新することで、事後分布を得ることができます。

このように、ベータ分布は事前分布としても、事後分布としても利用されるため、ベイズ推定において非常に便利です。

A/Bテストにおけるベータ分布の活用

A/Bテストでは、異なるバージョンのウェブページや広告の効果を比較するために、ベータ分布がよく使用されます。

例えば、バージョンAとバージョンBのクリック率を比較する場合、各バージョンの成功回数(クリック数)と失敗回数(表示回数)をもとにベータ分布を適用します。

これにより、各バージョンのクリック率の事後分布を得ることができ、どちらのバージョンがより効果的かを確率的に評価することが可能です。

ベータ分布の特性を利用することで、A/Bテストの結果をより信頼性の高いものにすることができます。

ベータ分布を使った確率モデリング

ベータ分布は、確率モデリングにおいても広く利用されています。

特に、確率が0から1の範囲にある場合、ベータ分布はその形状を柔軟に調整できるため、さまざまなデータに適合させることができます。

例えば、製品の不良率や顧客満足度など、割合を表すデータに対してベータ分布を適用することで、データの特性をより正確にモデル化できます。

また、ベータ分布は、他の分布と組み合わせて使用することも可能で、複雑な確率モデルを構築する際に役立ちます。

このように、ベータ分布は確率モデリングの強力なツールとして、多くの分野で活用されています。

まとめ

この記事では、ベータ分布の基本的な概念から、Pythonを用いた計算方法、matplotlibを使った描画方法、さらには実際の応用例まで幅広く解説しました。

ベータ分布は、特にベイズ推定やA/Bテストにおいて非常に有用なツールであり、確率モデリングにも適しています。

これを機に、実際のデータ分析や実験にベータ分布を活用してみてはいかがでしょうか。

関連記事

Back to top button