はじめに
さまざまな場面である事象が発生する確率や精度を算出し、それを伝える場面があると思います。(例えば、「この事象が発生する確率は0.7327、73.27%です。」など。)この時、確率を言い換えて、X回にY回ですと言いたくありませんか?もしくは、「つまりは、何回中に何回発生するの?」と尋ねられることがあるかと思います。特に、聞き手は具体的にも聞きたいと思っています。
確率の値のみを見て、本記事のタイトルのような「この事象はX回中にY回の確率で発生します。」と言いたい時に、@daikikatsuragawa は頭がこんがらがってしまったことがありました。それゆえ、確率の値を入力値として、分数に変換し出力し、「この事象はX回中にY回の確率で発生します。」と言うことができるようサポートする関数を作成しました。
「この事象はX回中にY回の確率で発生します。」
コードは以下のようになりました。
sample(1)
from decimal import Decimal
from fractions import Fraction
# 確率を分数に変換する関数(Fraction型)
def be_result_fraction(result, max_denominator=100):
return Fraction(Decimal(str(result))).limit_denominator(max_denominator)
# あらかじめ算出した確率
result = 0.33
# 分母の最大値
max_denominator = 100
result_fraction = be_result_fraction(result, max_denominator)
# 分数に変換した確率
print(result_fraction)
# 活用例(「この事象はX回中にY回の確率で発生します。」)
print("「この事象は{}回中に{}回の確率で発生します。」".format(result_fraction.denominator, result_fraction.numerator))
sample_result(1)
33/100
「この事象は100回中に33回の確率で発生します。」
ランダムにいくつか確率を生成し、試してみましょう。また、分母の最大値も変化させていきます。
sample(2)
import random
for i in range(10):
result = random.random()
print("確率={}の場合".format(result))
result_fraction=be_result_fraction(result, max_denominator=10)
print("「この事象は{:4}回中に{:4}回の確率で発生します。」".format(result_fraction.denominator, result_fraction.numerator))
result_fraction=be_result_fraction(result, max_denominator=100)
print("「この事象は{:4}回中に{:4}回の確率で発生します。」".format(result_fraction.denominator, result_fraction.numerator))
result_fraction=be_result_fraction(result, max_denominator=1000)
print("「この事象は{:4}回中に{:4}回の確率で発生します。」".format(result_fraction.denominator, result_fraction.numerator))
print("------------------------------------------------------------")
sample_result(2)
確率=0.09224231812091621の場合
「この事象は 10回中に 1回の確率で発生します。」
「この事象は 65回中に 6回の確率で発生します。」
「この事象は 477回中に 44回の確率で発生します。」
------------------------------------------------------------
確率=0.051084073961926824の場合
「この事象は 10回中に 1回の確率で発生します。」
「この事象は 98回中に 5回の確率で発生します。」
「この事象は 646回中に 33回の確率で発生します。」
------------------------------------------------------------
確率=0.7599338943119561の場合
「この事象は 4回中に 3回の確率で発生します。」
「この事象は 25回中に 19回の確率で発生します。」
「この事象は 604回中に 459回の確率で発生します。」
------------------------------------------------------------
確率=0.031495030898698206の場合
「この事象は 1回中に 0回の確率で発生します。」
「この事象は 95回中に 3回の確率で発生します。」
「この事象は 127回中に 4回の確率で発生します。」
------------------------------------------------------------
確率=0.8164261278465491の場合
「この事象は 5回中に 4回の確率で発生します。」
「この事象は 49回中に 40回の確率で発生します。」
「この事象は 207回中に 169回の確率で発生します。」
------------------------------------------------------------
確率=0.5320604454866015の場合
「この事象は 9回中に 5回の確率で発生します。」
「この事象は 47回中に 25回の確率で発生します。」
「この事象は 733回中に 390回の確率で発生します。」
------------------------------------------------------------
確率=0.49972055635837187の場合
「この事象は 2回中に 1回の確率で発生します。」
「この事象は 2回中に 1回の確率で発生します。」
「この事象は 999回中に 499回の確率で発生します。」
------------------------------------------------------------
確率=0.05425194009628509の場合
「この事象は 10回中に 1回の確率で発生します。」
「この事象は 92回中に 5回の確率で発生します。」
「この事象は 682回中に 37回の確率で発生します。」
------------------------------------------------------------
確率=0.1371848170653207の場合
「この事象は 7回中に 1回の確率で発生します。」
「この事象は 51回中に 7回の確率で発生します。」
「この事象は 277回中に 38回の確率で発生します。」
------------------------------------------------------------
確率=0.5388218822530633の場合
「この事象は 9回中に 5回の確率で発生します。」
「この事象は 13回中に 7回の確率で発生します。」
「この事象は 425回中に 229回の確率で発生します。」
------------------------------------------------------------
分子、分母が適切な値になっていますね。これに基づき微調整して他者に伝えることができそうです。
まとめ
これにより、「この事象はX回中にY回の確率で発生します。」と言いたい放題です。