• [世界杯]根据赔率计算各种组合可能性与赔率


    目录

    一、背景

    二、数据输入

    2.1 赔率示意图

    2.2 字典保存数据

    三、数据处理

    3.1 计算各种组合可能性

    3.2 修正概率

    四、输出结果

    五、代码


    一、背景

    本文以世界杯体彩“混合过关”4场串胜平负为的赔率进行编码

    其他类型如比分 、总进球数可以参考代码进行相应修改

    需要的库:numpy与pandas

    二、数据输入

    2.1 赔率示意图

    2.2 字典保存数据

    采用字典保存各比赛对应的胜平负的赔率

    1. import pandas as pd
    2. import numpy as np
    3. vs1 = {"胜":2.38,"平":2.93,"负":2.65} #厄瓜多尔-塞内加尔
    4. vs2 = {"胜":13.0,"平":6.20,"负":1.11} #卡塔尔-荷兰
    5. vs3 = {"胜":3.58,"平":3.16,"负":1.84} #伊朗-美国
    6. vs4 = {"胜":7.35,"平":4.16,"负":1.31} #威尔士-英格兰

    三、数据处理

    3.1 计算各种组合可能性

    计算采用的公式主要为:(图中10%为抽水率,仅为假设)

    其中0.9913为初步计算得到的体彩抽水率,实际不准确,该数值仅供初步计算,之后需要根据计算所得的概率进行相应修正

    1. count = 1
    2. probList = []
    3. probListIndex = []
    4. probVs = []
    5. timesList = []
    6. vsCode1 = []
    7. vsCode2 = []
    8. vsCode3 = []
    9. vsCode4 = []
    10. for key1,each1 in vs1.items():
    11. for key2,each2 in vs2.items():
    12. for key3,each3 in vs3.items():
    13. for key4,each4 in vs4.items():
    14. # print(count,key1,key2,key3,each1*each2*each3)
    15. prob = 99.13 / (each1*each2*each3*each4)
    16. #print(count,key1,key2,key3,key4,prob)
    17. probList.append(prob)
    18. probListIndex.append(count)
    19. probVs.append(key1+key2+key3+key4)
    20. timesList.append(each1*each2*each3*each4)
    21. vsCode1.append(key1)
    22. vsCode2.append(key2)
    23. vsCode3.append(key3)
    24. vsCode4.append(key4)
    25. count += 1
    26. data = pd.DataFrame(probList,index = probListIndex,columns=["prob"])
    27. data_temp = pd.DataFrame(probVs,index = probListIndex,columns=["vs"])
    28. data_times = pd.DataFrame(timesList,index = probListIndex,columns=["times"])
    29. data_vs1 = pd.DataFrame(vsCode1,index = probListIndex,columns=["vs1"])
    30. data_vs2 = pd.DataFrame(vsCode2,index = probListIndex,columns=["vs2"])
    31. data_vs3 = pd.DataFrame(vsCode3,index = probListIndex,columns=["vs3"])
    32. data_vs4 = pd.DataFrame(vsCode4,index = probListIndex,columns=["vs4"])
    33. # data = data.add(data_temp,fill_value=False)
    34. data["vs"] = data_temp["vs"]
    35. data["vs1"] = data_vs1["vs1"]
    36. data["vs2"] = data_vs2["vs2"]
    37. data["vs3"] = data_vs3["vs3"]
    38. data["vs4"] = data_vs4["vs4"]
    39. data["times"] = data_times["times"]
    40. data = data.sort_values(by="prob",ascending=False)
    41. data["total_prob"] = 0
    42. sum_prob = 0
    43. for each in data.index:
    44. # print(each)
    45. sum_prob += data["prob"].loc[each]
    46. data["total_prob"].loc[each] = sum_prob

    3.2 修正概率

    该段代码无实际含义,仅为修正由于采用估计抽水率计算所得的概率偏差

    主要思路是采用数据标准化后并将数据映射到合理的区间,并对部分概率进行转换

    1. total_prob_min = data["total_prob"].min()
    2. data["total_prob"] = (data["total_prob"]-data["total_prob"].min())/(data["total_prob"].max()-data["total_prob"].min())*(100-total_prob_min)+total_prob_min
    3. data["total_prob"].iloc[0] = (data["total_prob"].iloc[1]*data["total_prob"].iloc[0])/(data["prob"].iloc[1]+data["total_prob"].iloc[0])
    4. temp = data["total_prob"] - data["total_prob"].shift(1)
    5. temp[0] = data["total_prob"].iloc[0]
    6. data["prob"] = temp
    7. data["prob"].iloc[0] = data["total_prob"].iloc[0]
    8. data.to_csv(r"C:\Users\kkkk\Desktop\世界杯1129.csv")

    四、输出结果

    prob该组合可能性,total_prob为累计可能性,times为赔率,VS1~4为该组合对应的胜平负

     以11.29日赛程为参考,卡塔尔与威尔士大概率负,因此采用Excel筛选出相关组合,在所列组合中选取赔率较高的组合。

    五、代码

    1. import pandas as pd
    2. import numpy as np
    3. vs1 = {"胜":2.38,"平":2.93,"负":2.65}
    4. vs2 = {"胜":13.0,"平":6.20,"负":1.11}
    5. vs3 = {"胜":3.58,"平":3.16,"负":1.84}
    6. vs4 = {"胜":7.35,"平":4.16,"负":1.31}
    7. count = 1
    8. probList = []
    9. probListIndex = []
    10. probVs = []
    11. timesList = []
    12. vsCode1 = []
    13. vsCode2 = []
    14. vsCode3 = []
    15. vsCode4 = []
    16. for key1,each1 in vs1.items():
    17. for key2,each2 in vs2.items():
    18. for key3,each3 in vs3.items():
    19. for key4,each4 in vs4.items():
    20. # print(count,key1,key2,key3,each1*each2*each3)
    21. prob = 99.13 / (each1*each2*each3*each4)
    22. print(count,key1,key2,key3,key4,prob)
    23. probList.append(prob)
    24. probListIndex.append(count)
    25. probVs.append(key1+key2+key3+key4)
    26. timesList.append(each1*each2*each3*each4)
    27. vsCode1.append(key1)
    28. vsCode2.append(key2)
    29. vsCode3.append(key3)
    30. vsCode4.append(key4)
    31. count += 1
    32. data = pd.DataFrame(probList,index = probListIndex,columns=["prob"])
    33. data_temp = pd.DataFrame(probVs,index = probListIndex,columns=["vs"])
    34. data_times = pd.DataFrame(timesList,index = probListIndex,columns=["times"])
    35. data_vs1 = pd.DataFrame(vsCode1,index = probListIndex,columns=["vs1"])
    36. data_vs2 = pd.DataFrame(vsCode2,index = probListIndex,columns=["vs2"])
    37. data_vs3 = pd.DataFrame(vsCode3,index = probListIndex,columns=["vs3"])
    38. data_vs4 = pd.DataFrame(vsCode4,index = probListIndex,columns=["vs4"])
    39. # data = data.add(data_temp,fill_value=False)
    40. data["vs"] = data_temp["vs"]
    41. data["vs1"] = data_vs1["vs1"]
    42. data["vs2"] = data_vs2["vs2"]
    43. data["vs3"] = data_vs3["vs3"]
    44. data["vs4"] = data_vs4["vs4"]
    45. data["times"] = data_times["times"]
    46. data = data.sort_values(by="prob",ascending=False)
    47. data["total_prob"] = 0
    48. sum_prob = 0
    49. for each in data.index:
    50. # print(each)
    51. sum_prob += data["prob"].loc[each]
    52. data["total_prob"].loc[each] = sum_prob
    53. total_prob_min = data["total_prob"].min()
    54. data["total_prob"] = (data["total_prob"]-data["total_prob"].min())/(data["total_prob"].max()-data["total_prob"].min())*(100-total_prob_min)+total_prob_min
    55. data["total_prob"].iloc[0] = (data["total_prob"].iloc[1]*data["total_prob"].iloc[0])/(data["prob"].iloc[1]+data["total_prob"].iloc[0])
    56. temp = data["total_prob"] - data["total_prob"].shift(1)
    57. temp[0] = data["total_prob"].iloc[0]
    58. data["prob"] = temp
    59. data["prob"].iloc[0] = data["total_prob"].iloc[0]
    60. data.to_csv(r"C:\Users\kkkk\Desktop\世界杯1129.csv")

  • 相关阅读:
    Dockershim 与 Containerd:两种容器运行时的故事
    关于Git的入门教程(附GitHub和Gitee的使用方法)
    【Android Jetpack】理解ViewModel
    勒索病毒最新变种.halo勒索病毒来袭,如何恢复受感染的数据?
    专精特新企业申报条件是什么?
    软考:中级软件设计师:2022年下半年上午软件设计师考题
    MacOS Sonoma 14更新:优化小组件、升级视频会议、沉浸式游戏体验等
    Python shutil
    网络面试题汇总
    Apache SeaTunnel社区成功入选开源之夏活动,现开启导师招募!
  • 原文地址:https://blog.csdn.net/zsllsz2022/article/details/128106774