En créant un peu d’analyse à l’aide de ClickHouse et Superset, j’ai créé des données synthétiques pour tester les requêtes et les tableaux de bord.
Au début, tout avait l’air bien.
La répartition semblait raisonnable.
Les tableaux de bord se sont comportés comme prévu.
Rien ne semblait suspect.
Mais à mesure que l’ensemble de données augmentait en taille, quelque chose a commencé à sembler… bizarre.
Il s’est avéré que les revenus sont fortement concentrés dans un seul pays.
Dans certains cas, certains pays n’ont pas acheté du tout.
À première vue, cela ressemblait à un simple déséquilibre.
Mais le schéma était trop cohérent pour être ignoré.
Cela ne ressemblait pas à un problème de requête
L’hypothèse évidente était qu’il y avait quelque chose qui n’allait pas dans les demandes.
J’ai donc tout vérifié :
- logique de requête
- filtres
- vues matérialisées
- configurations du tableau de bord
Tout avait l’air bien.
Ce qui ne laissait qu’une seule possibilité :
Le problème n’était pas la manière dont les données étaient interrogées, mais la manière dont elles étaient générées.
Retour aux données
Au lieu de m’appuyer sur des tableaux de bord, je suis revenu aux données brutes.
Une simple agrégation a rendu les choses plus claires :
- un pays domine les achats
- l’autre manque complètement
Il est intéressant de noter que la répartition globale des événements semblait toujours normale.
Ce qui a d’abord rendu difficile l’identification du problème.
Le premier problème : une coïncidence qui n’en était pas une
La logique de génération de données d’origine utilisait rand() comme suit :
multiIf(
rand() % 100 < 40, 'India',
rand() % 100 < 65, 'US',
rand() % 100 < 80, 'UK',
rand() % 100 < 90, 'Germany',
'UAE'
)
À première vue, cela semble raisonnable.
Mais il y a un problème subtil.
Chaque appel à rand() est évalué indépendamment.
Ainsi, au lieu de générer une seule valeur aléatoire et d’attribuer une catégorie, la logique évalue un nouveau valeur aléatoire à chaque étape.
Ce petit détail introduit un biais involontaire.
Résoudre ce problème… et créer un nouveau problème
Pour rendre les données plus stables, je suis passé à une approche déterministe :
(number * 17) % 100 AS event_rand
(number * 29) % 100 AS country_rand
Cela a rendu la distribution prévisible et plus facile à raisonner.
Mais cela a également introduit un autre problème, qui n’était pas immédiatement évident.
Certains pays avaient désormais zéro achat.
Le vrai problème : la corrélation cachée
Le problème n’était plus aléatoire.
C’était corrélation.
event_type et country étaient dérivés de la même valeur de base : un nombre.
Même avec des facteurs différents, ils restaient mathématiquement liés.
Ce qui signifiait :
- certaines combinaisons ne pourraient jamais se produire
- certaines valeurs étaient implicitement « réunies »
Dans ce cas, les lignes produites "achat" ne s’aligne jamais avec les lignes produites "Émirats arabes unis".
Ainsi, les Émirats arabes unis se sont retrouvés sans achats.
Pas à cause des probabilités.
Mais à cause de la façon dont les données ont été construites.
Ce qui était en fait faux
Le principal problème n’était pas le hasard.
C’était non-indépendance.
Les variables de l’ensemble de données n’étaient pas indépendantes les unes des autres.
Et c’est suffisant pour produire des analyses trompeuses.
Corriger correctement les données
Pour résoudre ce problème, j’ai modifié la façon dont les valeurs étaient générées :
- utilisé différentes transformations
- décalages ajoutés
- une distribution indépendante des variables est assurée
Par exemple:
(number * 17) % 100 AS event_rand
(number * 31 + 13) % 100 AS country_rand
(number * 47 + 23) % 100 AS device_rand
Cela rompt l’accord entre les variables et rétablit l’indépendance.
Après ce changement, les distributions se sont comportées comme prévu.
Pourquoi c’est important
À plus petite échelle, le problème n’était pas évident.
Les données semblaient bonnes.
Les tableaux de bord semblaient corrects.
Mais à mesure que l’ensemble de données s’agrandit :
- les modèles sont devenus plus cohérents
- les préjugés sont devenus plus importants
- les fausses hypothèses ont commencé à ressembler à de vraies idées
Clé à emporter
Les données synthétiques peuvent paraître correctes, mais néanmoins fausses.
Le problème n’était pas la performance des requêtes.
C’était l’exactitude des données.
La mise à l’échelle des données n’était pas un problème.
Cela l’a révélé.
Réflexions finales
C’était un rappel utile que :
- la génération de données mérite autant d’attention que l’interrogation
- de petites hypothèses peuvent conduire à de grands écarts
- Les données « intelligentes » ne sont pas toujours fiables
Il est facile de faire confiance à ce que montrent les tableaux de bord.
Mais il faut parfois se demander comment ces données ont été créées.
Parents
Ce problème s’est produit lors de la création de configurations d’analyse à l’aide de ClickHouse et Superset, où je comparais également des tableaux bruts et des vues matérialisées.
Si ce paramètre vous intéresse :
👉 ClickHouse + Superset
Un message de notre fondateur
Salut Sunil, ici. J’aimerais prendre un moment pour vous remercier d’avoir lu jusqu’ici et de faire partie de cette communauté. Saviez-vous que notre équipe se porte volontaire pour produire ces publications destinées à plus de 3,5 millions de lecteurs mensuels ? Nous ne recevons aucun financement, nous faisons cela pour soutenir la communauté.
Si vous voulez montrer un peu d’amour, prenez un moment pour me suivre sur LinkedIn, TikTok, Instagram. Vous pouvez également vous abonner à notre newsletter hebdomadaire. Et avant de partir, n’oubliez pas d’applaudir et de suivre l’écrivain️ !
Quand les données synthétiques mentent : le problème de corrélation caché a été initialement publié sur Stackademic sur Medium, où les gens poursuivent la conversation en soulignant et en répondant à cette histoire.
PakarPBN
A Private Blog Network (PBN) is a collection of websites that are controlled by a single individual or organization and used primarily to build backlinks to a “money site” in order to influence its ranking in search engines such as Google. The core idea behind a PBN is based on the importance of backlinks in Google’s ranking algorithm. Since Google views backlinks as signals of authority and trust, some website owners attempt to artificially create these signals through a controlled network of sites.
In a typical PBN setup, the owner acquires expired or aged domains that already have existing authority, backlinks, and history. These domains are rebuilt with new content and hosted separately, often using different IP addresses, hosting providers, themes, and ownership details to make them appear unrelated. Within the content published on these sites, links are strategically placed that point to the main website the owner wants to rank higher. By doing this, the owner attempts to pass link equity (also known as “link juice”) from the PBN sites to the target website.
The purpose of a PBN is to give the impression that the target website is naturally earning links from multiple independent sources. If done effectively, this can temporarily improve keyword rankings, increase organic visibility, and drive more traffic from search results.
Jasa Backlink
Download Anime Batch
