Bonus-abuse y protección financiera
1) Qué es bonus-abuse y por qué es un problema financiero
Bonus-abuse es el uso específico de bonos/promociones para obtener un beneficio garantizado sin un riesgo de juego equivalente o eludiendo las reglas. Consecuencias:- Pérdidas directas: valor del bono, tiradas gratis, fees promocionales/FX, CB/Refund.
- Distorsión de métricas: AR/MAU inflado, falsos uplift's.
- Riesgos de pago: «carruseles» depozit→vyvod, chargeback-farming.
- Riesgos de licencia: violaciones de RG/KYC/AML, promociones de misleading.
2) Taxonomía del abuso (patrones)
1. Stacking - múltiples bonos por persona/hogar/dispositivo/token de pago.
2. Net-deposition loops - Depósito en aras del bono → apuestas mínimas → retiros o chargeback.
3. Hedging/Arbitrage - Apuestas en mercados/juegos interconectados para «cerrar» el riesgo.
4. High-RTP cherry-picking es un juego de títulos de alto valor en WR.
5. Method arbitrage es un método de depósito barato → un corredor de retiro caro/rápido.
6. Arbitraje FX - especulación sobre la diferencia cambiaria entre depósito y retiro.
7. Multi-accounting - clones con reutilización de dispositivos/redes/medios de pago.
8. Chargeback farming es un juego de bonificación, luego devuelve el depósito a través de la disputa/charjback.
9. KYC-evasion - Eludir el SoF/SoW, sustitución de país (VPN/Proxy/SIM).
3) Protección financiera (policy core)
ND (Net Deposits) -gate: participación/pagos en 'ND ≥ 0' (o umbral 'ND ≥ θ').
Same-method/Return-to-source: retiros hasta la cantidad ND - sólo en la fuente del depósito.
Payout-locks: prohibir/limitar la retirada en el bono activo antes de ejecutar WR y verificar las infracciones.
WR & Contribution%: reglas de apuesta transparentes (BONUS-ONLY o BONUS + DEPÓSITO) y peso por categoría de juego.
Max bet en WR: límite absoluto o fracción del bono (por ejemplo, '≤ 5 EUR' o '≤ 10% bonus').
One-per constraints: по person/household/device/payment_token.
Exclusiones del juego/risk: prohibición de «comprar freespines», jackpots, títulos RTP anormalmente altos.
Velocity caps: límites en la frecuencia de depósitos/retiros/pagos fallidos.
Rolling-reserve/holdbacks: amortiguador de seguros en socios/submercientes y para jugadores de alto riesgo.
Política de FX: fijar la nota de referencia en el bono grant; Controlar slippage en payout.
4) Señales de riesgo (de pago y comportamiento)
Payment: BIN-geo ≠ país KYC, soft-declines frecuentes, nuevos tokens seguidos, tarjeta/billetera, conocidos emisores de «alto riesgo».
Device/Network: device-graph coincide con otras cuentas, IP/ASN/VPN/hosting compartidos.
Behavior: sólo juegos de alta contributividad, retiro instantáneo después del depósito de min, repetición de violaciones de WR.
Geo: KYC≠IP≠SIM, velocidad geo anormal.
Docs: KYC/POA/SoF sospechosos (baja calidad, patrones, reuse).
FX: depósitos en moneda «débil», retiros en «fuerte», diferencial temporalmente alto.
Puntuación de riesgo: modelo lineal/GBM con fichas por bloque (Payment/Device/Behavior/Geo/FX), calibración de umbrales para step-up (KYC/Liveness/SoF) y deny.
5) Arquitectura de reglas (motor de políticas)
Idempotencia: desechabilidad de la subvención por payment_token/household/device.
Reglas «antes del depósito»: elegibilidad según GEO/KYC/ND/one-per.
Reglas «después del depósito»: activación de la subvención, max bet, WR, game-mix, temporizador.
Reglas «en salida»: same-method, corte ND, SoF/SoW step-up, hold/deny.
Auditoría: versión de las reglas, razones, evidencia (para apelaciones y regulador).
6) Incidente de playbucks
1. Abuse wave (stacking): la inmediata freeze de las subvenciones de esta campaña, el recuento de WR, el selectivo SoF, el banding de fichas/households.
2. Chargeback surge: habilitar 3DS-step-up, endurecer same-method, aumentar el hold en las conclusiones y la reserva de PSP.
3. Arbitraje FX: limite temporalmente los hallazgos cruzados de divisas e introduzca un protector spread.
4. Method arbitrage: cerrar los pasillos «caros» para los ND negativos, habilitar el retorno sólo a la fuente.
7) Derecho, RG y privacidad
Terms & Promo T&C: versión corta en cheque, completa en perfil; localizado.
RG: self-exclude/límites - los bonos no están disponibles; cooling-off anula las subvenciones activas.
KYC/SoF: minimización de datos, consentimiento explícito, política de retén, DPA.
Sanciones/licencias: listas blancas de países, prohibiciones de tipos de promociones en jurisdicciones específicas.
8) Datos y modelo (mínimo)
sql
-- Игрок и атрибуты риска risk.player_signals (
user_id PK, risk_score NUMERIC, nd_total NUMERIC, nd_30d NUMERIC, nd_7d NUMERIC,
kyc_level TEXT, geo_ip TEXT, geo_kyc TEXT, geo_sim TEXT,
device_hash TEXT, household_id TEXT, payment_token_last TEXT,
fx_profile JSONB, updated_at TIMESTAMP
);
-- Гранты бонусов и прогресс/нарушения bonus.grants (
grant_id PK, promo_id, user_id, deposit_tx_id, currency,
bonus_amount NUMERIC, granted_at TIMESTAMP, expires_at TIMESTAMP,
status TEXT -- ACTIVE FORFEITED COMPLETED EXPIRED FROZEN
);
bonus.wr_progress (
grant_id, user_id,
turnover_slots NUMERIC, turnover_tables NUMERIC, turnover_live NUMERIC,
turnover_total NUMERIC, required_total NUMERIC, updated_at TIMESTAMP
);
bonus.violations (
id PK, grant_id, user_id, type TEXT, severity TEXT, details JSONB, occurred_at TIMESTAMP
);
-- Нетто-депозиты и разрез по методам finance.net_deposits (
user_id, currency, nd_total NUMERIC, nd_by_method JSONB, updated_at TIMESTAMP
);
-- Выводы и причины hold/deny payout.requests (
payout_id PK, user_id, method TEXT, currency TEXT, amount NUMERIC,
nd_snapshot NUMERIC, same_method_ok BOOLEAN, risk_score NUMERIC,
status TEXT, reason_code TEXT, created_at TIMESTAMP, decided_at TIMESTAMP
);
9) Pseudo-DSL reglas
yaml policy: "bonus_abuse_v4"
eligibility:
geo_whitelist: [DE, AT, FI]
kyc_min: L1 nd_min: 0 one_per: [person, household, device, payment_token]
deny_if:
- sanctions_hit == true
- risk_score >= 0.85 grant:
max_bet_amount:
EUR: 5 wagering:
base: BONUS_ONLY multiplier: 30 contrib:
slots: 100 tables: 25 live: 10 game_exclusions: [JACKPOT, BUY_BONUS]
controls:
payout_lock: UNTIL_WR_DONE same_method: true allow_nd_withdrawal: true fx_spread_guard_bps: 80 method_arbitrage_block: true escalations:
- if: nd_7d < 0 then: "deny_new_bonus"
- if: device_household_overlap >= 2 then: "manual_review"
- if: cb_rate_30d > 0.8% then: "hold_payout_48h"
audience:
exclude_segments: ["self_excluded", "high_risk_bin"]
10) Plantillas SQL
10. 1. ND-gate y same-method en la salida
sql
SELECT r.payout_id,
(nd.nd_total >= 0) AS nd_non_negative,
(t.method = r.method AND t.payment_token = r.payment_token) AS same_method_ok
FROM payout.requests r
JOIN finance.net_deposits nd ON nd.user_id = r.user_id AND nd.currency = r.currency
JOIN dw.transactions_flat t ON t.tx_id = (
SELECT deposit_tx_id FROM bonus.grants
WHERE user_id = r.user_id AND status IN ('ACTIVE','COMPLETED')
ORDER BY granted_at DESC LIMIT 1
)
WHERE r.status='PENDING' AND r.created_at BETWEEN:from AND:to;
10. 2. Niño household/device overlap
sql
SELECT suspect.user_id, base.user_id AS overlap_with, suspect.device_hash, suspect.household_id
FROM risk.player_signals suspect
JOIN risk.player_signals base
ON suspect.user_id <> base.user_id
AND (suspect.device_hash = base.device_hash OR suspect.household_id = base.household_id)
WHERE suspect.updated_at > now() - INTERVAL '30 days';
10. 3. Violaciones Max-bet y game-mix
sql
SELECT b.user_id, b.grant_id,
SUM(CASE WHEN b.amount > l.max_bet_amount THEN 1 ELSE 0 END) AS maxbet_viol,
100.0 SUM(CASE WHEN game_category='slots' THEN b.stake ELSE 0 END)
/ NULLIF(SUM(b.stake),0) AS slots_share_pct
FROM dw.bets b
JOIN bonus.session_limits l USING (grant_id, user_id)
WHERE b.placed_at BETWEEN:from AND:to
GROUP BY 1,2
HAVING SUM(CASE WHEN b.amount > l.max_bet_amount THEN 1 ELSE 0 END) > 0
OR 100.0 SUM(CASE WHEN game_category='slots' THEN b.stake ELSE 0 END)
/ NULLIF(SUM(b.stake),0) >:one_game_share_max;
10. 4. Chargeback-post-bonus monitoreo
sql
SELECT method,
10000.0 SUM(is_chargeback::int) / NULLIF(COUNT(),0) AS cb_bps_14d
FROM risk.outcomes o
JOIN dw.transactions_flat t USING (tx_id)
WHERE o.occurred_at BETWEEN (CURRENT_DATE - INTERVAL '14 days') AND CURRENT_DATE
AND EXISTS (SELECT 1 FROM bonus.grants g WHERE g.deposit_tx_id=t.tx_id)
GROUP BY method
ORDER BY cb_bps_14d DESC;
10. 5. FX-slippage en la promoción
sql
SELECT g.promo_id,
SUM(fx_effective - fx_reference) 10000.0 / NULLIF(SUM(amount_reporting),0) AS fx_slippage_bps
FROM dw.transactions_flat t
JOIN bonus.grants g ON g.deposit_tx_id=t.tx_id
WHERE t.settled_at BETWEEN:from AND:to
GROUP BY 1;
11) KPI y dashboards
Abuse Rate: proporción de subvenciones con irregularidades/investigación.
WR Completion % / Time-to-WR (p50/p95).
ND Gate Hit% y proporción de ND <0 entre los participantes.
Chargeback After Bonus (bps) por métodos/PSP/geo.
Payout Hold Share y soluciones TAT promedio.
FX Slippage (bps) por promoción/divisas.
Promo Liability (pasivo) y Breakage%.
Household/Device Overlap Index (clustering).
12) Alertas y umbrales
Abuse Spike: рост `violations/100 grants` > X d/d.
CB Surge Post-Bonus: cb_bps_14d por método/geo> umbral.
ND Negative Share ↑: porcentaje de ND <0 entre las solicitudes de retirada> Y%.
Max-Bet Burst: aumento de infracciones> umbral por marca/título.
FX Anomaly: slippage_bps> límite para el par de divisas.
Household Bloom: un nuevo gran clúster de dispositivos/direcciones.
Policy Drift: subvenciones sin una versión fija de las reglas/consentimientos.
13) Patrones UX (sin «quema» de conversión)
Tarjeta de condiciones corta en la pantalla de depósito (min amb, WR, max bet, same-method).
WR-progress-bar + deadline, contribuciones por categoría.
Explicación de ND/retiros: «Hasta el importe de los depósitos netos - sólo por la fuente».
Paso suave: SoF/selfie por señal; plazos transparentes.
Apelaciones: botón «impugnar» con la lista de verificación de documentos.
14) Pruebas de protección A/B
Qué probar: 'nd _ min', 'max _ bet', 'WR multiplier/base', 'one _ per' -strategia, 'fx _ guard'.
Guardrails: CBR bps, Abuse Rate, AR/Take-Rate, Payout TAT.
Técnica: estratificación por GEO/BIN/método, CUPED por comportamiento preconcebido, lag por SV/conclusiones.
15) Lista de verificación de implementación
- Modelo ND y corte por métodos; same-method/return-to-source в payout.
- Promo DSL + validador de reglas, versiones y auditoría.
- Max bet, WR, contrib%, exclusions; límites de velocity.
- Device/household graph; Perfiles BIN-geo/FX.
- Riesgo-puntuación + paso-ups (KYC/SoF) y deny-umbral.
- Mecánica Hold/Reserve en pines y PSP.
- Dashboards KPI y alertas; playbucks de incidentes.
- Textos legales (local), RG-Gates, consentimiento y retiro.
- Proceso de apelaciones y decisiones manuales con SLA.
- A/B con estrictos guardrails y friso de datos.
Resumen
La protección efectiva contra el bonus-abuse es un sistema, no un conjunto de prohibiciones: control ND y same-method en los pagos, WR/max-bet riguroso y contrib%, señales de pago/dispositivo/Behavior/FX, puntuación de riesgo con step-ups, UX transparente y limpieza legal. Tal pila reduce las pérdidas directas, estabiliza P&L y mantiene una experiencia honesta para los jugadores de buena fe - sin demasiada fricción y «falsos positivos».