Antifrod et antibot dans la gamification basée sur ML
1) Pourquoi un système antifrod séparé pour la gamification
La gamification stimule l'activité (missions, tokens, cosmétiques), et donc provoque :- bots (scripts d'exécution de mission, phares de tokens/notations) ;
- multiaccounts/collusions (serrage d'équipe, « recadrage » des récompenses) ;
- émulateurs/ruth device (manipulation du client) ;
- l'exploit des missions (cycles où les progrès se font sans réel jeu).
Les objectifs de l'antifrod : maintenir l'honnêteté, ne pas surchauffer l'UX, respecter la vie privée/réglementation et maintenir l'économie promise.
2) Signaux et fiches (que compter)
Dispositif et environnement
Certification de l'intégrité du client (mobile/web), caractéristiques de l'émulateur/Ruth, profil WebGL/Canvas non standard.
Device fingerprint (sans PII) : combinaisons User-Agent, polices, graphiques, temps de rendu.
Biométrie comportementale
Rythme des clics/tasses, fluidité des courbes, micropausabilité, variabilité des trajectoires.
Bruits « humains » : tremblements du curseur, microdraffe du scroll, répartition des intervalles (lognormalité).
Modèles de jeu et de mission
Cycles répétés de longueur « parfaite », taux anormalement stable (spin/min).
Des fenêtres d'activité étroites (par exemple, toutes les 10 min), des finitions instantanées de quêtes à plusieurs volets.
Signaux graphiques et réseau
Coïncidences IP/AS, sources de paiement communes (en agrégats), groupes d'amis/invitations.
Participation conjointe à des tournois avec des « sous-joueurs » (corrélations étranges des résultats).
Économie/promo
Monétisation disproportionnée dans les missions avec tokens, conclusions brusques après le phare.
RG/contexte
Séances ultra-longues sans micropases (bot), « convoyeurs » de nuit.
3) Pile modèle (comme attraper)
1. Anomalie-détecteurs (unsupervised) :- Isolation Forest, One-Class SVM, Autoencoder pour le comportement et les appareils.
- Utilisation : tôt « scoring suspicion » sans étiquette « coupable ».
- Détection communautaire (Louvain/Leiden) + signes de centralité (betweenness, degree).
- GNN (GraphSAGE/GAT) pour la classification des nœuds/arêtes (collusions, fermes de comptes).
- Graduate Boosting/Tabular Transformers par les étiquettes des enquêtes passées.
- Les probabilités calibrées → la confiance dans la prise de décision.
- User2Vec sur les séquences d'événements ; les distances → « bot clusters ».
- Le choix d'une barrière minimale (chèque léger vs vérification rigide) sous le contexte du risque de × UX.
4) Orchestration des règles (moteur politique)
L'idée : ML donne une risk_score, la politique décide « quoi faire » en tenant compte de l'économie et de l'UX.
Exemple de niveaux :- R0 (vert) : sans restriction ; surveillance passive.
- R1 (jaune) : Doux « challenges humains » (microproduction), le cap des missions est réduit.
- R2 (orange) : device-chèque, contrôle du rythme, réduction de l'émission de tokens.
- R3 (rouge) : bloc de progression pour les missions controversées, modération manuelle/gel temporaire des récompenses.
- R4 (noir) : ban/CUS-rhubarbe (si la réglementation est autorisée et justifiée).
Conducteurs de transition : risque agrégé, drapeaux graphiques de collusions, plaintes, signal des fournisseurs.
5) Barrières honnêtes sans trop de friction
Invisible checks : biométrie comportementale de fond, évaluation de l'environnement.
Humanity-action au lieu de captcha : mini geste (drag-pattern aléatoire, slider improvisé), time window avec micropauses.
WebAuthn/Passkeys pour les actions « chères » : sécuriser votre appareil/identité sans mot de passe.
Barrières réactives : ne sont incluses qu'au moment des anomalies, pas toutes.
6) Anti-modèles de missions (comment ne pas laisser « pharmacie »)
Variabilité des exigences : une série d'actions dans différents fournisseurs/temps/taux.
Couldowns et changement de contenu : interdiction du même type de cycles consécutifs.
Événements de contrôle aléatoires : petites vérifications « humaines » au milieu d'une longue mission.
Limiter les progrès parallèles : empêcher les fermes de fermer des dizaines de missions en même temps.
7) Conformité, vie privée, transparence
Minimisation des données : seulement les fiches nécessaires, stockage des agrégats anonymes.
Explainability : reason-codes pour les actions controversées (par exemple, « vitesse anormale + grappe graphique »).
Processus d'appel : forme compréhensible d'appel ; une révision rapide.
Politiques de RG : en cas de signes de fatigue, nous réduisons la charge de travail plutôt que de « pousser » le joueur.
8) Les métriques du succès et les gardiens de l'économie
Taux Bot/Collusion catch (proportion identifiée avant l'obtention des prix clés).
Faux Taux positif (seuil Lag to Action (temps de l'anomalie à la mesure). Emission to GGR et Prix ROI : la défense se paie. Complaint/Appeal rate и Appeal overturn rate. Impact on UX : conversion des missions, mute/opt-out de la personnalisation, NPS par honnêteté. 9) A/B et validation hors ligne 1. Missions anti-consommation : variabilité vs de base. 2. Humanity-chèque : geste invisible vs capcha classique. 3. Seuil de risk_score : doux/dur (TPR/FPR différents). 4. Filtres graphiques : avec/sans GNN, seulement les règles du graphe. 5. Orchestrateur de barrières : statique vs contextuel bandit. 10) Pseudo-code (scoring → politique → action) 11) Modèles JSON (règles et journal) 12) Processus de réponse et de redtiming Surveillance en temps réel : dashboards sur les surtensions de risque, compounds. 1. détail de l'anomalie → 2) réduction de l'émission/gel des récompenses controversées → 3) échantillonnage des loges/graphes → 4) patch des règles/modèles → 5) recalculation rétro des récompenses honnêtes. Red Team/Underground Lab : simulation de bots (obfuscation, randomisation), attaques de modèles (example adversarial). Sorties Canaries : Nous lançons de nouvelles barrières pour 5 à 10 % du trafic. 13) UX et communications Un ton neutre, respectueux : « On a remarqué des actions hors norme - confirmez que vous êtes humain (30 secondes) ». Options : « répéter plus tard », « contacter le support », « appel ». Accessibilité : alternatives pour les personnes ayant des limitations motrices/visuelles. Transparence : page « Comment nous défendons l'honnêteté » avec des principes généraux (sans ordonnance pour abus). 14) Architecture technique (en résumé) Collecte des événements : Kafka/Redpanda, schémas 'mission _ progress', 'input _ stream', 'device _ attest'. Fichestor : en ligne (latence ms) + hors ligne (batchi 1-6 h). Services ML : 'risk-scorer', 'graph-service', 'policy-engine'. Dépôt de preuves : logs immuables (WORM), cryptage au repos et dans le canal. Security : les sièges de sécurité RNG sur le serveur ; le client n'est qu'une visualisation. 15) Chèque-liste avant la sortie L'antifrode/antibot dans la gamification est une couche de ML + graphes + barrières honnêtes qui sont allumées exactement là où vous voulez. La biométrie comportementale et l'anomalie-detect donnent un signal précoce, l'analyse graphique ouvre les collusions, l'orchestrateur sélectionne un minimum de vérification suffisante. Avec la transparence, la confidentialité et le respect de l'UX, le système maintient l'honnêteté des compétitions, protège l'économie des récompenses et ne transforme pas le produit en une « piste d'obstacles » pour les joueurs de bonne foi.
python def score_request(user, event):
x = build_features (user, event) # périphérique, comportement, caractéristiques graphiques r_unsup = oc_svm. score (x) # anomalie r_sup = gbdt. predict_proba (x) [:, 1] # probabilité de frod r_graph = gnn_node_prob (user. node_id) # risque graphique risk = calibrate (r_unsup, r_sup, r_graph) # étalonnage isotrope return risk
def decide_action(risk, context):
contexte : importance de l'action, valeur de la récompense, facteur if risk UX <0. 25: return "ALLOW"
if risk < 0. 45: return "SOFT_CHECK" # humanity-gesture, micro-pause if risk < 0. 65: return "DEVICE_ATTEST" # integrity + сниж. cap des missions if risk <0. 85 : return « HOLD_REWARDS » # gel à return rhubarbe « BAN_OR_REVIEW »
def enforce(action, user):
barrière minimum nécessaire if action = = "SOFT_CHECK" : trigger_humanity_challenge (user)
elif action == "DEVICE_ATTEST": run_integrity_attestation(user. device)
elif action == "HOLD_REWARDS": freeze_rewards(user, duration="72h")
elif action == "BAN_OR_REVIEW": open_case_to_fraud_ops(user)
Journal de la décision (pour l'audit/appel) :
json
{
"policy_id": "anti_fraud_s1", "tiers": [
{"name":"R0","risk_lt":0. 25,"action":"allow"}, {"name":"R1","risk_lt":0. 45,"action":"soft_check"}, {"name":"R2","risk_lt":0. 65,"action":"device_attest_and_cap"}, {"name":"R3","risk_lt":0. 85,"action":"hold_rewards_review"}, {"name":"R4","risk_gte":0. 85,"action":"ban_or_kyc_review"}
], "caps": {"missions_per_day_r2": 2, "token_emission_multiplier_r2": 0. 5}, "appeal": {"enabled": true, "sla_hours": 48}
}json
{
"decision_id":"dec_2025_10_24_1415", "user_id":"u_45219", "risk_components":{"unsup":0. 38,"sup":0. 41,"graph":0. 57}, "final_risk":0. 51, "action":"device_attest_and_cap", "reasons":["abnormal_click_tempo","graph_cluster_c17"], "expires_at":"2025-10-27T14:15:00Z"
}