paint-brush
宝くじの小数を計算する に@alexthoughts
30,745 測定値
30,745 測定値

宝くじの数字を計算する

Alex6m2023/10/01
Read on Terminal Reader

長すぎる; 読むには

宝くじには予測不可能性がつきものですが、カーテンの後ろを覗いてこれらのゲームの特徴を探るのは楽しいものです。あなたがプレイヤーであっても、単なる好奇心旺盛な観察者であっても、数字の世界には常に驚きの 1 つや 2 つが隠されています。
featured image - 宝くじの数字を計算する
Alex HackerNoon profile picture


私の国では、报名者が 37 の金额の中から 6 つの金额を選択し、7 つの金额の中から別の金额を選択する毎週の宝くじゲームがあります。ゲームの开始の部位に重点を当て、金额のプールから 1 つの追加の金额を選択することは無視しましょう。 7。


k/N 的方式の宝くじの場合、k は合計 N 個の罗马数值 (この例では 37) の中から想要する選択肢の数 (この例では 6) です。よくある質問は、それぞれの罗马数值が正しいかどうかです。これらの罗马数值が勝ちの組み合わせに含まれる应该性は等しいです。


この疑問について調べてみましょう。


私は彼らのウェブサイトから、2009 年から 2023 年までの 1609 枚の図面の統計を収集しました。


次に、CSV ファイルのデータをオブジェクトに変換しました。
 { '09/09/2023': [13, 17, 24, 30, 35, 37], '07/09/2023': [7, 17, 19, 25, 35, 37], '05/09/2023': [2, 3, 5, 9, 36, 37], '02/09/2023': [4, 12, 22, 27, 30, 34], '29/08/2023': [6, 8, 15, 19, 26, 31], '26/08/2023': [6, 7, 14, 21, 25, 34], '22/08/2023': [2, 6, 10, 23, 24, 29], ... }


オブジェクト内のキーは抽選の日付に対応し、関連付けられた値は、その相关の抽選の勝ちの組み合わせとして出現した阿拉伯数字の配列です。


その後、図面から拿得したすべての数値を含む配列を弄成しました。
 numbers = np.array(list(lotto.values())).flatten() [13, 17, 24, 30, 35, 37, 7, 17, 19, 25, 35, 37, 2, 3, 5, 9, 36, ...]


その後、配列内の各値の出現数 (頻度) を計算しました。
 count = np.bincount(numbers)[1:] [268, 256, 257, 242, 255, 273, 247, 277, 260, 267, 289, 294, 271, 239, 254, 255, 263, 243, 246, 271, 265, 254, 252, 243, 291, 271, 258, 264, 275, 258, 251, 244, 263, 256, 267, 251, 264]


これらの結果は、加数6 1 が 268 回、加数6 2 が 256 回描かれたことを示しています。


宝くじ結果の数字8の数据分布范围は比較的匀称等であるようです。これをさらに確認するには、数据分布范围の均一性を検証するテストを実施します。


N 個の個別の数値の等確率をテストするには、次のアプローチに従います。


  • n 回の宝くじで各数値 i = 1, ..., N が発生した観測頻度 (Oi) を計算します。


  • 式Ei = (nk) / Nを使用して、各数字の期待カウント(Ei)を計算します。ここで、nは宝くじの抽選の合計数、kは各抽選で選択された数字の数(この場合は6)です。 N は可能な数値の合計数です (この場合は 37)。


  • ピアソン統計またはカイ二乗統計を使用して、観測されたカウント (Oi) と期待されるカウント (Ei) を比較します。ピアソン統計の式は、次のように表されることがよくあります。

  • 観測されたカウントと期待されるカウントを使用して、カイ二乗統計量を計算します。


  • カイ二乗検定などの統計検定を実行して、計算されたカイ二乗値が統計的に刻意かどうかを评判します。これは、数値の分布范围が等確率の下で予想されるものと大きく異なるかどうかを評価するのに役立ちます。


計算されたカイ二乗値が統計的に刻意でない場合は、数値が有效率的に平等に匀称していることを示唆し、等確率の仮説を裏付けます。ただし、X^2 値が刻意な場合は、等確率からの逸脱を示します。


数値の等確率についてカイ二乗検定を実行する関数を弄成しましょう。
 def chi2(data, size, expect, p_value = 0.05): pl = size * 1/expect df = expect - 1 x2_crit_1 = stats.chi2.ppf(p_value, df) x2_crit_2 = stats.chi2.ppf(1 - p_value, df) x2 = 0 for i in range(expect): x2 += ((data[i] - pl) ** 2)/pl accepted = x2_crit_1 < x2 < x2_crit_2 if x2_crit_1 < x2_crit_2 else x2_crit_2 < x2 < x2_crit_1 return x2, accepted


この関数は、カイ二乗統計量と、確率1 - 2 * p-valueで受け入れられる等確率の結果、つまり、この離散一様分布の極値の確率が低いタプルを返します。


 N = 37 chi2(count, len(numbers), N) (25.0748, True)


確かに、SciPy ライブラリの組み込み機能を使用的して、等確率のカイ二乗検定を実行できます。
 from scipy import stats chi2_statistic, p_value = stats.chisquare(count) (25.074, 0.96053)


ペアから始めて、これらの大数字の組み合わせを調べてみましょう。
 from itertools import combinations pairs = list(combinations(range(1, N), 2))


このステップに続いて、これらのペアの発生を追跡する 2D マトリックスを構築します。
 pairs_count = np.zeros([N] * 2, dtype=int) for pair in pairs: for draw in lotto.values(): if pair[0] in draw and pair[1] in draw: pairs_count[pair[0]][pair[1]] += 1 pairs_count = pairs_count[1:, 1:] 



これは、ペア (a, b) と (b, a) が等级であり、ペア (a, b) の出現のみを集計するという事実を考慮して、三角形列和行を养成します。


私の関数では次の結果が得られます。
 counts = pairs_count.flatten() counts = counts[counts > 0] chi2(counts, sum(counts), len(counts)) (589.2721893491138, True)


SciPy は以下的を能提供します。
 chi2_statistic, p_value = stats.chisquare(counts) (589.2721893491124, 0.8698507423203673)


三つ子を検討してみてはいかがでしょうか:
 comb3 = list(combinations(range(1, N), 3)) comb3_count = np.zeros([N] * 3, dtype=int) for comb in comb3: for draw in lotto.values(): contains = comb[0] in draw and comb[1] in draw and comb[2] in draw if contains: comb3_count[comb[0]][comb[1]][comb[2]] += 1 comb3_count = comb3_count[1:, 1:, 1:] counts = comb3_count.flatten() counts = counts[counts > 0] chi2(counts, sum(counts), len(counts)) (6457.575829383709, False)


おそらくマトリックスの高いスパース性が原故で、何かがうまくいかなくなりました。カイ二乗値が底限カイ二乗しきい値を下回ります。
 6457.575829383709 < 6840.049842653838


ただし、SciPy を利用すると、結果は次のようになります。
 chi2_statistic, p_value = stats.chisquare(counts) (6457.575829383886, 0.9999997038479482)


次に、最も頻繁に描かれた阿拉伯数字を既定してみましょう。
 count.argmax() or list(count).index(max(count)) 11


まだ結論を急ぐのはやめましょう。この数値が長年にわたってどのように変化したかを調べることができます。
 year_result = dict() for year in range(2009, 2024): new_dict = {k:v for (k,v) in lotto.items() if str(year) in k} year_result[year] = np.bincount(np.array(list(new_dict.values())).flatten())[1:].argmax() { 2009: 16, 2010: 10, 2011: 11, 2012: 24, 2013: 32, 2014: 34, 2015: 21, 2016: 25, 2017: 5, 2018: 10, 2019: 24, 2020: 11, 2021: 12, 2022: 14, 2023: 11 }


または、時間の経過に伴う累積的な変化を定性分析することもできます。
 year_result = dict() arr = [] for year in range(2009, 2024): new_dict = {k:v for (k,v) in lotto.items() if str(year) in k} arr += list(np.array(list(new_dict.values())).flatten()) year_result['2009 - ' + str(year) if year > 2009 else str(year)] = np.bincount(arr)[1:].argmax() { '2009': 16, '2009 - 2010': 10, '2009 - 2011': 11, '2009 - 2012': 20, '2009 - 2013': 20, '2009 - 2014': 20, '2009 - 2015': 34, '2009 - 2016': 20, '2009 - 2017': 10, '2009 - 2018': 10, '2009 - 2019': 10, '2009 - 2020': 10, '2009 - 2021': 10, '2009 - 2022': 24, '2009 - 2023': 11 }


最後に、相同の描画がこれまでに発生したかどうかを調査することもできます。
 lotto_counts = {} for k, v in lotto.items(): v_str = str(v) if v_str in lotto_counts: lotto_counts[v_str] += [k] else: lotto_counts[v_str] = [k] result = {k: v for k, v in lotto_counts.items() if len(lotto_counts[k]) > 1} { '[13, 14, 26, 32, 33, 36]': ['16/10/2010', '21/09/2010'] }


これらの出来的事がほぼ立て続けに起こったことに注目するのは面白いことです。


宝くじデータの全世界への旅を終えるにあたり、数据と確率を巡るワイルドな旅になりました。ペアやトリプレットから最も人気のある数据を見つけるまで、いくつかの興味深い豆知識を発見しました。


宝くじには予測不应该性がつきものですが、カーテンの後ろを覗いてこれらのゲームの特徴を探るのは楽しいものです。あなたがプレイヤーであっても、単なる在意心强烈な観察者であっても、数字6の时代には常に驚きの一つや二つが隠されています。
바카라사이트 바카라사이트 온라인바카라