🛒 Bazaar

polymarket
mercados de predicción
probabilidades
candidatos

Los mercados de predicción como Polymarket merecen atención. ¿Qué precio le ponen los apostadores del mundo a cada candidato colombiano?

Autor/a
Afiliación

Recetas Electorales

Análisis independiente

Fecha de publicación

20 de abril de 2026

Fecha de última modificación

3 de mayo de 2026

“Prices at any moment reflect a clash of narratives rather than any kind of consensus.”
—Rajiv Sethi, “Predicting Rare Events”


El Bazar de las apuestas

Las encuestas preguntan. Los mercados de predicción apuestan.

Nuestro Ajiaco2 y la Cazuela estiman la distribución de intención de voto “spot”, hoy. Polymarket estima quién gana. Son preguntas distintas, pero se pueden complementar: un candidato que lidera encuestas pero tiene baja probabilidad en Polymarket puede estar sufriendo un problema de viabilidad percibida por el mercado.

En un mercado de predicción como Polymarket, los participantes compran y venden contratos que valen $1 si un evento ocurre. El precio de cada contrato refleja la probabilidad implícita que el mercado asigna a ese resultado. Si un contrato por “Claudia López gana la primera vuelta” se transa a $0.30, el mercado dice que hay un 30% de probabilidad de que eso ocurra.

A diferencia de las encuestas, que miden la intención declarada de votantes o posibles votantes, Polymarket agrega la información privada de apostadores que arriesgan dinero real. Es un mecanismo distinto, con sesgos y problemas distintos, y por eso es interesante ponerlo al lado de nuestros modelos bayesianos.

Descargando los datos

Usamos el paquete polymarketR para acceder a la API pública de Polymarket:

Ver código
library(polymarketR)

descargar <- function(slug, mercado) {
  polymarketR::get_event_prices_history(
    event_slug = slug, interval = "max", fidelity = 1440
  ) |> dplyr::mutate(mercado = mercado)
}

bazar_raw <- dplyr::bind_rows(
  descargar("colombia-presidential-election",             "Ganador general"),
  descargar("colombia-presidential-election-1st-round-winner", "Primera vuelta")
)

Evolución de las probabilidades

Analizamos dos mercados simultáneamente: Ganador general (quién gana la presidencia) y Primera vuelta (quién gana la primera vuelta). Cada candidato tiene un contrato “Yes/No” en cada mercado; el precio “Yes” es la probabilidad implícita Figura 1.

Ver código
cinco_candidatos <- tibble::tribble(
  ~patron,       ~nombre,                    ~color_cand,
  "Cepeda",      "Iván Cepeda",              "#A52E94",
  "Espriella",   "Abelardo de la Espriella", "#000066",
  "Fajardo",     "Sergio Fajardo",           "#442F7E",
  "Lopez|L.pez", "Claudia López",            "#00B399",
  "Valencia",    "Paloma Valencia",          "#63B9E9"
)

bazar_plot <- bazar_raw |>
  dplyr::filter(outcome == "Yes") |>
  dplyr::mutate(fecha = as.Date(datetime)) |>
  dplyr::filter(stringr::str_detect(groupItemTitle, stringr::str_c(cinco_candidatos$patron, collapse = "|"))) |>
  dplyr::mutate(nombre = cinco_candidatos$nombre[
    purrr::map_int(groupItemTitle, ~ which(stringr::str_detect(.x, cinco_candidatos$patron))[[1]])
  ]) |>
  dplyr::left_join(cinco_candidatos |> dplyr::select(nombre, color_cand), by = "nombre") |>
  dplyr::group_by(nombre, color_cand, mercado, fecha) |>
  dplyr::summarise(prob = mean(price), .groups = "drop")

p_evolucion <- bazar_plot |>
  dplyr::filter(fecha >= lubridate::ymd("2026-03-12")) |>
  ggplot2::ggplot(ggplot2::aes(
    x     = fecha,
    y     = prob,
    color = nombre,
    group = nombre,
    text  = paste0(nombre, ": ", scales::percent(prob, accuracy = 0.1),
                   "<br>", format(fecha, "%d %b %Y"))
  )) +
  ggplot2::geom_line(linewidth = 1.0, alpha = 0.85) +
  ggplot2::scale_color_manual(
    values = setNames(cinco_candidatos$color_cand, cinco_candidatos$nombre)
  ) +
  ggplot2::scale_y_continuous(labels = scales::percent_format(accuracy = 1), limits = c(0, NA)) +
  ggplot2::facet_wrap(~ mercado) +
  ggplot2::labs(
    title    = "Probabilidades implícitas — Polymarket",
    subtitle = paste0("Datos al ", Sys.Date()),
    caption  = "Fuente: polymarket.com con polymarketR",
    x        = NULL,
    y        = "Probabilidad implícita",
    color    = NULL
  ) +
  ggplot2::theme_minimal(base_size = 14) +
  ggplot2::theme(
    text             = ggplot2::element_text(family = "news-cycle"),
    legend.position  = "bottom"
  )

plotly::ggplotly(p_evolucion, tooltip = "text") |>
  plotly::layout(
    legend = list(orientation = "h", y = -0.2, x = 0.5, xanchor = "center")
  )
Figura 1: Evolución de las probabilidades implícitas en Polymarket

Distribución actual

¿Dónde están hoy las fichas? Figura 2

Ver código
bazar_hoy <- bazar_plot |>
  dplyr::group_by(nombre, color_cand, mercado) |>
  dplyr::filter(fecha == max(fecha)) |>
  dplyr::summarise(prob = mean(prob), fecha_max = max(fecha), .groups = "drop")

bazar_hoy |>
  ggplot2::ggplot(ggplot2::aes(
    x    = prob,
    y    = reorder(nombre, prob),
    fill = color_cand
  )) +
  ggplot2::geom_col(alpha = 0.85) +
  ggplot2::scale_fill_identity() +
  ggplot2::geom_text(
    ggplot2::aes(label = scales::percent(prob, accuracy = 0.1)),
    hjust = -0.15, size = 4.5, family = "news-cycle"
  ) +
  ggplot2::scale_x_continuous(
    labels = scales::percent_format(accuracy = 1),
    expand = ggplot2::expansion(mult = c(0, 0.2))
  ) +
  ggplot2::scale_y_discrete(labels = scales::label_wrap(15))+
  ggplot2::facet_wrap(~ mercado) +
  ggplot2::labs(
    title    = "Probabilidades implícitas — Polymarket",
    subtitle = paste0("Última actualización: ", max(bazar_hoy$fecha_max)),
    caption  = "Fuente: polymarket.com con polymarketR",
    x        = "Probabilidad implícita",
    y        = NULL
  ) +
  ggplot2::theme_minimal(base_size = 15) +
  ggplot2::theme(
    text               = ggplot2::element_text(family = "news-cycle")
  )
Figura 2: Probabilidades implícitas actuales según Polymarket

El mercado vs. las encuestas

Los mercados de predicción y las encuestas miden cosas distintas:

Encuestas Polymarket
¿Quién responde? Votantes colombianos Apostadores del mundo
¿Qué mide? Intención de voto declarada Probabilidad implícita de victoria
Incentivo para ser honesto Ninguno Dinero real
Horizonte Estado actual Resultado final
Sesgo conocido Efecto casa, NS/NR Sesgos de mercado, liquidez
AdvertenciaOjo

Los mercados de predicción internacionales pueden tener información asimétrica sobre política colombiana. El volumen de transacciones y la profundidad del mercado son indicadores importantes de cuánto peso darle a estas señales.

Cómo citar

BibTeX
@online{recetas_electorales2026,
  author = {{Recetas Electorales}},
  title = {🛒 Bazaar},
  date = {2026-04-20},
  url = {https://www.recetas-electorales.com/elecciones/2026-colombia/2026-04-20-bazaar/2026-bazaar.html},
  langid = {es}
}
Por favor, cita este trabajo como:
Recetas Electorales. 2026. “🛒 Bazaar.” April 20. https://www.recetas-electorales.com/elecciones/2026-colombia/2026-04-20-bazaar/2026-bazaar.html.