You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Pinnacle数据为tibble新增期望值(EV)列的技术问询

分组Tibble中基于Pinnacle数据计算期望值(EV)的解决方案

核心计算逻辑

针对每个比赛分组:

  • 主队行EV = Pinnacle主队的no_vig_bep × 当前行win值 - (1 - Pinnacle主队的no_vig_bep) × 100
  • 客队行EV = (1 - Pinnacle客队的no_vig_bep) × 当前行win值 - Pinnacle客队的no_vig_bep × 100

示例数据集

先构造一个符合grouped_df结构的示例:

library(tibble)
library(dplyr)

# 模拟分组后的数据集
grouped_df <- tibble(
  match_id = rep(1:2, each=4),
  bookmaker = c("Pinnacle", "Pinnacle", "Bet365", "Betfair", "Pinnacle", "Pinnacle", "William Hill", "Ladbrokes"),
  side = c("home", "away", "home", "away", "home", "away", "home", "away"),
  win = c(190, -110, 200, -105, 180, -108, 195, -112),
  no_vig_bep = c(0.526, 0.474, NA, NA, 0.518, 0.482, NA, NA)
) %>% 
  group_by(match_id)

计算代码

利用dplyr的分组操作,在每个比赛组内提取Pinnacle的对应值并计算EV:

grouped_df_with_ev <- grouped_df %>%
  mutate(
    # 提取当前分组中Pinnacle主队的无抽水胜率
    pinnacle_home_bep = first(no_vig_bep[bookmaker == "Pinnacle" & side == "home"]),
    # 提取当前分组中Pinnacle客队的无抽水胜率
    pinnacle_away_bep = first(no_vig_bep[bookmaker == "Pinnacle" & side == "away"]),
    # 分情况计算EV
    ev = case_when(
      side == "home" ~ pinnacle_home_bep * win - (1 - pinnacle_home_bep) * 100,
      side == "away" ~ (1 - pinnacle_away_bep) * win - pinnacle_away_bep * 100,
      TRUE ~ NA_real_
    )
  ) %>%
  # 移除临时变量(可选)
  select(-pinnacle_home_bep, -pinnacle_away_bep)

计算验证

以match_id=1的Bet365主队行为例:

  • Pinnacle主队no_vig_bep=0.526,Bet365主队win=200
  • EV = 0.526×200 - (1-0.526)×100 = 105.2 - 47.4 = 57.8
    运行代码后,该行的ev列值会匹配此计算结果。

内容的提问来源于stack exchange,提问作者Aaron Morris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 10:05:27