[Sports] Don’t miss a shot in biathlon races

Today, I want to speak about my favorite sport to watch on TV, which is biathlon (the one which involves skiing and shooting at things. Who doesn’t love that?). I really enjoy to follow the races, and not only because the best athlete at this moment is a french one (go Martin!), but because the shooting part seems so crucial and stressful. This leads me to wonder about how much missing a shot is relevant for the ranking in the end of the race. Let’s find out!

Shoot

Gathering some data

My idea is to do some basic analysis on data about the results of many biathlon races, in order to evaluate if there is some form of correlation between the final ranking and the number of shot missed. This requires to first gather the data. The results are stored on multiple sites: obviously Wikipedia pages of the championships, but this website is much more detailed. I’m going to use some of the results between 2007 and 2015. I won’t use all of the races because I want to have comparable results: I’m going to only consider the races where the number of competitors is between 50 and 60. This allows me to interpret the results about final ranking with a similar scaling system for all the races. Moreover, the specificity of biathlon is that the rules are very different from a format to another (see this Wikipedia article for more informations), and I can’t easily discriminate my data between them. Using a limitation on the number of participants is a way to limit the width of the spectrum of formats considered. Well, let’s forget these technicalities and analyse the data!

Don’t miss a shot!

So, the idea is to put in regard the number of shots missed and the final ranking. Fun fact: the number of shot during a race is 20, but the maximum number of shot missed during a race I analysed is only 9. That’s not really a surprise if you frequently watch biathlon, because missing that much shots usually means that you’re going to finish in last place. I’m going to use a heat map in order to show the correlation. An heat map is a form of 2D data vizualisation which is based on a spectrum of colors. Thedarker the color is, the more important the value is. The idea here is to put in rows the final ranking, and in columns the number of shots missed. Here is what we obtain:

Miss a shot

There results directly show that:

  • There is a clear diagonal on the heat map. This isn’t really surprising: that means that everytime an athlete misses a shot, his final ranking goes lower. This is our first result: missing shot are penalties. What a surprise!
  • There is also a very dark blue area in the first column, at the top of the diagram. This means that most of the time, doing a clear round leads to a very good ranking in the end.
  • But it is clearly possible to win a race while missing some shots! The first row is filled with dark blue in the first few columns.

Don’t miss a prone shot!

As you may know, there is two different types of shooting during a biathlon race: the prone shot, where the athletes are lying on the floor; this position helps them to stabilise their aim. The other type is the standing shot, which is much more difficult. Therefore, it might be interesting to deal with the two phases of shooting separately. Let’s start with the prone shot, as this is usually the first phase of shooting during a race.

Prone shot

We see the same pattern as the total of shots. The top of the first column is much darker than before: this is because of two things. First, it is usual that a lot of athletes don’t miss a shot during the prone shot phase. And that means that missing a prone shot is much more a sign of a bad shooting, which leads to a bad ranking at the end. This point is very important: we’re not evaluating results in a vacuum: and missing a shot usually means that the athlete is in a bad shape compared to the others, and therefore has a bad ranking. But this also means that missing a shot during the first phase raise the odds of missing shots during the other phases.

Let’s have a look at the heat map for the standing shots.

Standing shot

As expected (because the initial one is the combinaison of these two heatmap), we’ve a much more dispersed heat map. Missing a standing shot is something that happens to pretty much everyone, even the best athletes.

Is the starting order relevant?

I add to the analysis a last factor: the starting order, which is linked to the expectation of results of the athlete (based on a global ranking, or on the results of another race). The heat map showing the correspondances bewteen the final ranking (still in rows) and the starting order (in columns) shows a clear diagonal line: the expectation seems relevant.

Starting order

In order to do a much more indepth analysis, I’m going to perform a linear regression on these variables. I want to know if the final ranking is explained by the initial order, the number of prone shots missed and the number of standing shots missed. This linear regression will also help me to evaluate how big of an impact these three variables have on the final outcome. Let’s have a look at the results:

Call:
lm(formula = ranking ~ prone shots  + standing shots + starting order)

Residuals:
    Min      1Q  Median      3Q     Max 
-60.625  -8.483  -0.101   9.268  45.295 

Coefficients:
                  Estimate  Std. Error  t value   Pr(>|t|)    
(Intercept)       5.816571   0.212517   27.37

The three variables of the model are statistically significant, which means that they do have a relation with the final ranking. Understanding the coefficient for the Starting Order is kind of tough, but the two other coefficients are much more easier to analyse:

  • When you miss a prone shot, you lose about 5 places at the end of the race
  • When you miss a standing shot, you lose about 1 place at the end of the race

Obviously, these results are only valid on average. But this is kind of a fun way to comment biathlon shootings! “Oh, you just lost 10 places!”.

[Sampling] Combien de salons de coiffure ont un jeu de mots dans leur nom ? (Deuxième partie)

Suite de notre première partie. Nous avions utilisé une méthode de sondage pour déterminer le nombre de salons de coiffure dont le nom est un jeu de mots. Dans cette seconde partie, nous allons essayer d’utiliser une méthode d’apprentissage pour estimer ce nombre. L’idée sera d’entraîner un modèle à reconnaître si une enseigne de coiffure présente un jeu de mots ou non. C’est parti !

Jeu d’entraînement

Il faut commencer par constituer un “jeu d’entraînement” (ou training set), qui comportera des noms avec et sans jeu de mots, de manière à ce que le modèle choisi puisse construire une règle de classification. Ce jeu d’entraînement, nous allons devoir le constituer à la main. Comme je n’ai pas envie de passer mon dimanche entier à classer des noms de salons de coiffure suivant qu’ils contiennent un jeu de mots ou non (je serais obligé de mentir si on me demandait ce que j’ai fait de mon week-end à la machine à café lundi matin) je choisis de me limiter à 200 enseignes, que je vais tirer aléatoirement dans la base.

Petite remarque supplémentaire : si je tirais ces noms avec une probabilité uniforme (comme on l’a d’abord fait en première partie), ma base comporterait environ 10 enseignes avec jeu de mots contre 190 enseignes sans (puisque, d’après la première partie, le taux de salons de coiffure avec un jeu de mot vaut environ 5%). Avec simplement 10 noms comportement un jeu de mot dans notre base de références, faire classer efficacement les noms de salons par un modèle ne serait pas chose aisée… Je choisis donc d’utiliser à nouveau un tirage stratifié (comme en première partie), de manière à équilibrer les données sur lesquelles le modèle va être entraîné.

Avant de passer à la suite, je réserve 50 noms parmi mes données d’entraînement que j’utiliserai uniquement pour tester la qualité de mon modèle. Le modèle sera donc entraîné sur 150 noms de salons, parmi lesquels environ 50% présentent un jeu de mot (je nomme ces données “jeu de développement”).

Une nécessaire sous-estimation

Il va s’agir de choisir un classificateur d’apprentissage qui présente de bonnes performances sur des données issues de Natural Language Processing (NLP). Le but est que notre modèle soit capable de reconnaître un jeu de mots similaire à ceux qui sont contenus dans le jeu de développement. Des noms similaires à une enseigne contenue dans le jeu de test devraient être correctement classés si les différences sont mineures (quelques lettres, l’ordre, une préposition en plus ou en moins, etc.). Par exemple, si le jeu de développement contient “FAUT TIFF HAIR”, il est bien possible que “FAUTIF HAIR” ou “FAUT TIF HAIRS” soient correctement classés. A fortiori, tous les noms strictement identiques à ceux du jeu de développement seront correctement classés. Par contre, on ne peut pas raisonnablement s’attendre à ce que le modèle soit capable de reconnaître un jeu de mots très différent de ceux qui seront contenus dans cette base de données.

Finalement, il faut s’attendre à ce que cette façon de procéder aboutisse à une sous-estimation du nombre de salons de coiffure avec jeu de mots. Pour le vérifier, on pourra comparer avec l’intervalle de confiance établi en première partie.

Le choix du modèle

J’utilise l’excellent librairie python scikit-learn, que j’utilise pour tester différents types de classificateurs. Bien souvent en machine learning, il s’agit de tester rigoureusement différents modèles et différents choix de paramètres comparativement les uns aux autres. Dans notre cas, je cherche simplement un classificateur suffisamment performant pour aboutir à une conclusion à peu près robuste. Je me contente donc de quelques essais à la main pour effectuer mon choix de modèle. J’effectue ensuite un petit grid search pour tester différents choix de paramètres. Dans le cas du choix de modèle comme du grid search, j’utilise une validation croisée pour choisir le meilleur modèle. Mon classificateur final est donc :

vectorizer = TfidfVectorizer(ngram_range=(1, 3), analyzer='char',
use_idf=False, stop_words=["SARL", "SAS", "SA"])

clf = Pipeline([
('vec', vectorizer),
('clf', SGDClassifier(loss="hinge", penalty="l2")),
])

clf.fit(docs_train, y_train)

Je peux enfin tester la performance de mon modèle sur le jeu de test de 50 noms que j’ai mis de côté :

Classé “avec jeu de mots” Classé “sans jeu de mots”
Sans jeu de mots 17 7
Avec jeu de mots 11 15

Par ailleurs, le jeu de test contenait 26 noms avec jeu de mots. L’estimation issue du modèle donne 22 noms avec jeu de mots, ce qui est cohérent avec le fait qu’on s’attend à obtenir une sous-estimation.

Petits tests à la main

Avant de faire tourner le classificateur sur l’ensemble de la base, j’effectue quelques petits tests à la main, avec des noms d’enseigne inventés. Comme prévu “CREA TIFFS”, “FAUT TIFF HAIR” et “FAUX TIFF HAIR”, proches de certains noms du jeu de développement, sont bien reconnus comme présentant un jeu de mot . “HAIR DRESSER” et “COIFFURE JEAN MICHEL” sont également correctement classés, en tant que noms ne présentant pas de jeu de mots. Je teste ensuite “LA CHAMBRE A HAIR”, “VOLT HAIR” et “LE SAVOIR F HAIR” (merci au tumblr lolcoiffeurs pour les idées !), sans grand espoir car ces jeux de mots me semblent trop éloignés de ceux présents dans le jeu d’entraînement. Et pourtant, les trois sont bel et bien reconnus comme jeux de mots ! Mon dernier test, “DE MECHE AVEC VOUS”, n’est lui pas correctement reconnu. Cela ne m’étonne pas outre mesure, car le nom de salon qui s’en approchait le plus dans mon jeu d’entraînement était “MECH EN LOOK”, qui ne contenait même pas le mot “MECHE” en entier. Finalement, je suis plutôt agréablement surpris des performances du modèle (comme souvent en learning , même si dans notre cas, le modèle et son ambition sont très modestes).

Les résultats

En exécutant notre classificateur sur toute la base des noms de salons, on obtient une valeur d’estimation de :

916, soit 3% de coiffeurs (contre environ 5% par la méthode par sondage)

présentant un jeu de mots dans leur enseigne. Ce chiffre correspond à l’estimation basse obtenue par sondage en partie 1. Ceci est cohérent avec notre remarque faite plus haut : ce chiffre obtenu par apprentissage est une sous-estimation du nombre total.

Dernière remarque : ce modèle est valable uniquement pour les enseignes de salons de coiffure. On pourrait appliquer une méthode similaire pour déterminer le nombre de jeu de mots parmi les enseignes d’un autre secteur (les boulangeries par exemple), en changeant le training set et en ajustant le modèle. Mais trouver une méthode générale pour reconnaître ce qui constitue ou non un jeu de mots en français serait une autre paire de manches !

Note 1 : L’image-titre est issue d’une note de Boulet, qui possède un blog bd très sympa que je vous encourage à aller voir !

Note 2 : en échangeant à propos de cet article, on m’a fait remarquer que notre définition du jeu de mot n’incluait pas par exemple le cas d’un jeu de mot “pour initié” sur le quartier dans lequel est situé la boutique ou sur le nom des entrepreneurs. Je précise donc que notre définition recouvre plus ou moins les jeux de mots “compréhensibles par tous” 😉

[Sports] Best/Worst NBA matchups ever

Earlier this month, the Philadelphia 76ers grabbed their first (and for now, only) win of the season by beating the Lakers. That night, checking for the menu on the NBA League Pass, I quickly elected not to watch this pretty unappealing matchup. Though I couldn’t help thinking that it is a shame for franchises that have both won NBA titles and see legends of the game wear their jerseys. During many seasons, a Lakers-Sixers game meant fun, excitement and most important of all excellent basketball. And I started wondering what were the best and worst matchups throughout NBA history.

Data and model

My criterion to evaluate these matchups will be the mean level of the two teams during each season. In fact, by “good” matchup I mean a game that feature two excellent ball clubs, making it an evening every NBA fan awaits impatiently as soon as the season calendar is made available. On the contrary, a “bad” matchup is a game whose only stake will be to determine draft pick orders. My criterion does not predict the actual interest of watching these games: a confrontation between two top teams might very well be pretty boring if the star players are having a bad night (or if the coach decides to bench them). Also, a contest between two mediocre teams might very well finally be a three-OT thriller with players showing excellent basketball skills. In fact, my criterion only holds from an historical perspective (or in the very unlikely case that you have to choose between the replay of several games without knowing when these games were played 🙂 ).

The level of each team is estimated using the excellent FiveThirtyEight NBA Elo rankings. Then, to rank the 435 possible matchups between the 30 NBA franchises, I will average the mean level of every two teams for all years between 1977 and 2015 (I chose to limit the analysis to after the NBA-ABA merger of 1976 so as to avoid dealing with defunct franchises). You can found the R codes I used on my GitHub page.

The best matchups

Of course, our method values regularity, so it’s no surprise we find at the top matchups between the teams that have been able to maintain a high level of competitivity throughout the years. In fact, the best matchup ever is “Lakers – Spurs”, two teams that have missed the playoffs only respectively 5 and 4 years since the 1976-1977 season! “Celtics – Lakers” comes in 6th: basketball fans won’t be suprised to find this legendary rivalry ranked up high. It might even have been higher if I had taken seasons prior to the merger into account. The first 10 matchups are:

1. “Lakers – Spurs”
2. “Lakers – Suns”
3. “Lakers – Trailblazers”
4. “Lakers – Thunder”
5. “Suns – Spurs”
6. “Celtics – Lakers”
7. “Spurs – Trailblazers”
8. “Spurs – Thunder”
9. “Rockets – Lakers”
10. “Spurs – Heat”

The worst matchups

The worst matchup ever is “Timberwolves vs. Hornets”. Thinking about the last few years, I have to admit that these games were clearly not among my favorites. Poor Michael Jordan’s Hornets trust the last 7 places on the ranking, thanks to the inglorious Bobcats run.

Among the most infamous matchups ever are:

425. “Clippers – Timberwolves”
426. “Clippers – Nets”
427. “Raptors – Hornets”
428. “Wizards – Timberwolves”

434. “Kings – Hornets”
435. “Timberwolves – Hornets”

I really hope the owners of these franchises are able to turn the tide and put their teams back up in the rankings soon!

[Sampling] Combien de salons de coiffure ont un jeu de mots dans leur nom ? (Première partie)

Nous connaissons tous une boulangerie, ou un salon de coiffure, qui a un jeu de mots dans son nom (“L’Hair du temps” ?), mais est-ce vraiment si répandu ? Essayons de répondre à cette question. Il y a plusieurs manières d’aborder ce problème : utiliser une approche de type apprentissage (mais il n’est jamais simple de faire comprendre l’humour à un ordinateur, et nous discuterons de cela plus tard), ou une approche de type sondage (ce qui sera fait dans un premier temps, dans cet article).

L’idée derrière cette approche consiste à se dire que juger la totalité des noms des salons de coiffure serait assez long (il y en a plusieurs dizaines de milliers) et que l’on va donc seulement s’intéresser à un petit échantillon (qui ne sera pas “représentatif” !) sur lequel on fera le travail de juger si le nom correspond à un jeu de mots ou pas.

Quelques considérations pratiques tout d’abord : nous avons un jeu de données composé de 30 083 entreprises françaises dont l’activité principale est dans le domaine du 9602A, ce qui dans le monde merveilleux des nomenclatures de la statistique publique, signifie que ce sont des entreprises dans le domaine de la coiffure, donc des salons de coiffure. On va également considérer qu’une taille raisonnable pour le travail de détection des jeux de mots est de prendre n = 200.

Première tentative

Nous allons donc extraire un échantillon de 200 SIREN de notre base, en utilisant un sondage aléatoire simple pour les choisir. Qu’entend-on par sondage aléatoire simple ? Comme son nom l’indique, il s’agit d’une technique basique de sondage qui repose sur deux postulats : on peut sélectionner tout le monde avec la même chance, et on veut aboutir à une taille fixe. Une représentation possible de ce type de sondage consiste à imaginer une urne avec les 30 083 boules qu’on mélange, puis on extrait une à une des boules jusqu’à en avoir le nombre souhaité, ici 200. Ce type de sondage est facile à mettre en pratique ; et il est facile d’utiliser les résultats obtenus pour avoir une estimation sur la population totale, et même une idée de la précision de cette estimation. On peut se référer au cours suivant pour une présentation plus détaillée.

Nous avons donc suivi ce plan de sondage, et nous avons un échantillon de 200 noms de salons de coiffure. Il reste maintenant à analyser les résultats pour détecter les jeux de mots : cette phase est forcément subjective, mais j’ai essayé ici de prendre la définition la plus large possible de jeu de mots, c’est à dire à chaque fois qu’il peut y avoir un double sens ou un jeu sur la prononciation de mots. Regardons plutôt quelques exemples trouvés dans l’échantillon :

Atmosp’hair, Posi’if, Aux mains d’argent, L’art de Pl’Hair, Diminu Tif, FauTif’Hair…

J’arrive au total à 13 jeux de mots, ce qui nous donne un pourcentage de jeux de mots de 6,5% parmi les salons de coiffure. L’utilisation d’un sondage aléatoire simple permet de garantir que cette estimation est sans biais (c’est un estimateur d’Horvitz-Thompson (en) du ratio), c’est à dire que, en moyennant sur tous les échantillons que l’on peut obtenir, on obtient la vraie proportion sur la population totale des salons de coiffure. Cela signifie en particulier que l’estimation que nous avons est fiable.

Cependant, cela ne signifie pas qu’elle est précise ! Prenons un exemple simple. On a deux individus A et B, avec une valeur de 0 pour A et de 100 pour B, et que l’on veut estimer la moyenne des valeurs dans la population, qui vaut 50. Lorsque l’on réalise un sondage aléatoire simple d’un individu parmi les deux, nous allons avoir la moitié du temps A et donc une estimation de 0, et la moitié du temps B et une estimation de 100. Cela donne bien 50 en moyenne : pourtant dans une réalité où l’on ne peut pas répéter le tirage des échantillons, on aurait juste l’observation de B (par exemple), et donc un estimateur de 100. Cette estimation est très imprécise : cela vient de la faible taille de l’échantillon (1 n’est pas suffisant), et de la très grande hétérogénéité de la population (si A avait une valeur de 1 et B de 2, on serait plus proche de la vérité). On peut aussi voir, en anglais, l’exemple des éléphants de Basu (en), bien connu des étudiants en théorie des Sondages.

Il existe une formule permettant de calculer la variance de l’estimation. On peut se référer par exemple aux slides 60 et suivantes de cette présentation. Globalement, dans le cas d’une proportion, la variance vaut à peu près :

Variance = Proportion * (100% – Proportion) / Taille de l’échantillon

À partir de ce résultat, on peut calculer un intervalle de confiance pour la vraie valeur de la proportion. Il suffit d’enlever et d’ajouter 1,96 fois la racine carrée de la variance. L’intervalle obtenu donne un ensemble de valeurs pour lesquelles l’observation qu’on a, c’est à dire la valeur obtenue sur l’échantillon, n’est pas trop improbable ; on considère ainsi qu’il est possible moins de 5 fois sur 100 pour une vraie valeur hors de cet intervalle d’obtenir un tel résultat.

L’application de ces méthodes ici donne l’intervalle de confiance suivant : [3.1% ; 9.9%]. Il est assez large, car d’une part la taille de l’échantillon est assez faible, et d’autre part la proportion estimée est faible, ce qui a tendance à réduire la précision des estimations : un caractère rare dans une population est difficile à détecter, et n’apparaît pas si souvent dans l’échantillon, donc l’information collectée reste assez faible.

Adaptons le sondage

Même s’il est possible d’être assez déçu par le résultat obtenu à l’aide de ce premier échantillon, il ne faut pas désespérer. En effet, il est toujours possible d’améliorer un plan de sondage une fois que l’on a collecté un peu plus d’informations. Ici, il est possible de faire une remarque générale sur les jeux de mots trouvés : la plupart d’entre eux contiennent soit le mot “Hair”, soit le mot “Tif”. Il est fort probable que l’on trouve plus de jeux de mots dans les salons dont le nom contient un des deux mots que dans la population générale. Nous allons utiliser cette nouvelle information pour réaliser un sondage stratifié (voir ce cours pour plus d’informations).

Pour reprendre l’analyse développée dans la partie précédente, avec une urne remplie de 30 083 boules, il va s’agir ici de séparer a priori, sur un critère connu (qui sera ici la présence ou non du mot “Tif” ou “Hair” dans le nom) les boules entre deux urnes, pour ensuite en tirer un certain nombre dans la première urne puis, indépendamment, un certain nombre (qui peut être différent du premier) dans la seconde urne.

Il ne reste qu’à séparer les 200 salons de coiffure entre les deux catégories, dites strates : la strate 1, qui regroupe les 2 603 salons de coiffure avec “Hair” ou “Tif”, dans laquelle on suppose qu’il y a environ la moitié de jeux de mots, et la strate 2 des autres salons de coiffure, dans laquelle on va supposer qu’il y a 1% de jeux de mots. Ces suppositions permettent de calculer des allocations, c’est à dire le nombre d’unités à tirer dans chaque strate, en utilisant la technique dite de l’allocation de Neyman (slide 61 de cette présentation). Cette allocation, classique en sondages, vise à maximiser la précision de l’estimateur obtenu à la fin, en prenant plus d’individus dans les strates avec une forte variance, ce qui est ici le cas de la strate 1 ; en effet, il y aura à peu près autant de jeux de mots que de non jeux de mots, alors que dans la strate 2 ce sera principalement des noms sans jeu de mots, donc assez peu variés.

Le résultat obtenu ici consiste à tirer 141 salons de coiffure de type 1 et 59 salons de coiffure de type 2. On réalise alors un tel tirage. Les résultats obtenus sont de 68 jeux de mots dans la première strate, et de 1 jeu de mots dans la seconde : “C’est dans l’ère”, assez proche du thème classique de Tif et Hair, mais avec une autre graphie !

Ici, il n’est évidemment pas possible d’extrapoler le résultat à la population totale en disant que la proportion de jeux de mots est de 68+1 sur 200, soit 34.5%. Il faut pondérer les résultats obtenus par la part que représente chacune des strates :

Estimation de la proportion = % de salons dans la strate 1 * proportion de jeux de mots dans la strate 1 + % de salons dans la strate 2 * proportion de jeux de mots dans la strate 2

ce qui donne ici 2603/30083*68/141 + 27480/30083*1/59 = 5,7%. On est bien dans l’intervalle de confiance obtenu tout à l’heure, ce qui est plutôt encourageant. Mais quelle est la précision de ce nouvel estimateur ? Pour cela, on utilise le même type de formule de calcul de variance pour chacune des strates :

Variance_Strate = Proportion_Strate * (100% – Proportion_Strate) / Taille de l’échantillon_Strate

puis on combine ces résultats pour avoir la variance de l’estimation :

Variance = (Part strate 1)² * Variance_Strate_1 + (Part strate 2)² * Variance_Strate_2

et enfin, on construit l’intervalle de confiance de la même façon que précédemment. Nous obtenons ici [4,1% ; 7,3%] qui est plus resserré que celui obtenu au début : nous avons bien amélioré la précision de notre estimation !

Conclusion

Ainsi, en utilisant un sondage intelligent, basé sur l’étude de certaines caractéristiques des jeux de mots dans les salons pour la stratification, nous arrivons au résultat que parmi les 30 083 salons de coiffure, il y en a environ 1 700 dont le nom comporte un jeu de mots, plus ou moins 500, soit très probablement entre 1 200 et 2 200.

[Sports] Why favourite tennismen win even more than they should

Today, I’d like to write a short note to begin to answer one simple question: which sport is the most conservative? By conservative I mean a sport where the favourite team or athlete wins much more often than the other. As this is quite a large problem, which had been adressed for NFL, I’ll start with some results about some racquet sports, tennis and badminton. I won’t use real data but rather focus on some simulations in order to evaluate the chances to win a match when you’re the #1 tennismen against less talented players.

Game, Set, Match

I won’t explain the rules of scoring in tennis matches, but I’d like to remind you some of the basic principles. To win a tennis match, you need to win 2 or 3 sets. Each set requires you to win at least 6 games, but also two more games than your opponent. And to win a game, you need to score 4 points AND 2 more points than your opponent. These rules mean that a tennis match can last almost forever but as they are very restrictive, they also favor the most efficient player. Let’s have a simple example to understand that.

Let’s say Adam and Becky play a game where they have to score 2 points in 3 rounds. Becky plays way better and has a 90% chance to win each point. The probability of Becky winning is 0.9*0.9 (she wins the first two rounds) + 0.9*0.1*0.9 (she wins round 1, loses round 2 but wins round 3) + 0.1*0.9*0.9 (she loses round 1, but wins rounds 2 and 3), which sums to 97.2%, therefore Adam has a 2.8% chance to win at that game. That is pretty low.

What happens if we add the ‘tennis’ rule of “2 more points than your opponent” ? The game becomes “the first one to score 2 points in a row win”. The maths needed to get Becky’s changes of winning are a little more complex in this example: one way to deal with that problem is to think about the first two rounds. After these two rounds, there is 81% that the winner is Becky, 1% that it is Adam, and 18% that no one has won yet. If we repeat this process, we get a geometric series which sums to approx. 98.8%. Adam’s chances of winning have dropped even more: only 1.2% now!

Let’s go back to Tennis

Now Becky and Adam are tired of playing a game Adam always loses, and they decide to go outside in order to play some tennis. Suppose that Adam is better at this sport than Becky. A conservative hypothesis is to suppose that he’ll win 51% of the time, while she’ll win only 49% of the time. The difference is fairly minor, and that shouldn’t have a big impact, right?

I write a short program in R which simulates thousands of matches in order to know who wins between the two players. The program is quite simple, here is the part about simulating a game :

 win_a_point <- function(advantage) {
  x = runif(1,0,1)
  if (x > advantage) {return(2)}
  else {return(1)}
}

gagne_jeu <- function(advantage) {
  score = c(0,0)
  while ((max(score) < 4) | (abs(score[1]-score[2]) < 2)) {
    x = win_a_point(advantage)
    score[x] <- score[x] + 1
  }
  if (score[1] > score[2]) {return(1)}
  else {return(2)}
}

The results obtained for 100.000 matches (in 3 winning sets) simulated are compiled in this tabular:

Point Game Set Match
51% 52.5% 58.4% 63%

Another interesting result is the following graph:

Tennis

Even if the edge for the better player is as low as 5 percent (55-45 for each point), the match is clearly one-sided. This means that as long as one player have a predominant position and so a little more chance to win each point than his opponent, he is almost assured to win at the end. That makes tennis a very conservative sport!

What about Badminton ?

In order to compare this result to some benchmark, I run the same simulations about Badminton. The rules are quite different but not so much, as it is required to get to 21 points in order to win a game, with at least a two-points lead. Winning a match requires to win two games before your opponent does so. With a small adjustment, I use the same program as before and the results obtained are compiled in this graph:

Badminton

To conclude, compared to Badminton, Tennis is definitely a conservative game!

[Sports] Why 6% should be the golden number in professional cycling

Disclaimer : I don’t pretend to be a pro rider nor a sport doctor/physiologist, just a data scientist who sometimes likes to apply mathematical modeling to understand some real-world situations 🙂

Are all slopes only for lightweights ?

I’m a bike enthusiast and I used to race (although I was far from being a champion!). I noticed during the training sessions among teammates that had approximately equivalent physical abilities than mine that our ways of performing were very different: every time we climbed a long steep hill, there was no way I could follow their pace no matter how hard I tried, but on the contrary, when I rode in front on a faux plat (especially when there was a lot of wind), I would sometimes find myself a few meters ahead of the pack without really noticing. In fact, I was physically quite different from the rest of the pack: my BMI is roughly equal to 23.5, whereas most of my training mates were in the low 19s.

Watching the pros compete, I found a somewhat similar pattern: although it’s very unlikely that we see a powerful sprinter such as André Greipel win the Flèche Wallonne someday at the famous and feared Wall of Huy ; however, the podium of the 2011 World championships in Copenhaguen was 100% “sprinters”, although the finish line was at the end of a slight slope (with a reasonable gradient of ~ 3%).

The intuition : there exists a “limit gradient”

Based on these two examples, we can see that although very steep hills are obviously lightweight riders’ turf, more powerful (and thus, heavier) riders can still outperform them on slopes with low gradients. So, my intuition was that there exists a “limit gradient” after which the benefits of being powerful (which comes up with being heavier, given that riders have same physical abilities) are overrun by the benefits of being more lightweight, which gives an edge when you have to fight gravity. Are we going to be able to quantify such a limit ?

The power formula

The power needed to move at speed v on a bike is sum of the power needed to move the air, the power needed to resist friction, and the power needed to resist gravity:
\(\begin{align*}
P &= P_{air} + P_{friction} + P_{gravity} \\
&= v \cdot \left( \dfrac{1}{2} \cdot \rho \cdot SC_X \cdot (v-v_{wind})^2 + Mg C_r \cos \phi + C_f (v-v_{wind})^2 + Mg \sin \phi \right) \\
\end{align*}\)
where:
\(\begin{align*}
\rho &= \text{Cubic mass of air} \\
SC_X &= \text{Drag coefficient} \\
C_r &= \text{Wheels coefficient} \\
C_f &= \text{Friction coefficient} \\
M &= \text{total weight rider + bike} \\
g &= 9.81 ms^{-2} \\
\phi &= \text{slope gradient} \\
v_{wind} &= \text{wind speed} \\
\end{align*}\)
The values chosen for the parameters can be found in the R code on my GitHub page.

This formula shows that the lighter you are, the less power you need to move at speed v. But let’s not forget that my hypothesis is precisely that if you are more powerful, you may be heavier but you’ll also be able to produce more power!

W/kg and Kleiber’s law

So now, I need a equation to relate mass and power for riders with similar abilities. One way to do this is to consider that physical abilities are measured by power divided by body mass (a measure that has been widely used and discussed recently). So this is going to be my first work hypothesis:
\(\begin{align*}
\text{H1: } \frac{P}{m} \text{ is constant among riders of the same level}
\end{align*}\)
 

Nevertheless, this doesn’t feel satisfying: sure, it is very common to assume a linear relationship between two parameters, but most of the time we do this because we lack of a better way to describe how things work. And in this case, it seems that power is linked to body weight by Kleiber’s law, which is going to be my second work hypothesis:
\(\begin{align*}
\text{H2: } {\left(\frac{P}{m}\right)}^{0.75} \text{ is constant among riders of the same level}
\end{align*}\)

Plotting the power

Now, I need the value of the constants under hypotheses H1 and H2. For now, I’m only interested in top-level riders, so I choose to use Strava data for Robert Gesink on the wall of Huy to compute the constants under hypotheses H1 and H2. Turns out Gesink, who weighs 70kg, was able to develop a mean power of 557W during the climbing of the hill, which gives us our two constants:
\(\begin{align*}
C_{H1} &= \frac{557}{70} \\
C_{H2} &= {\left( \frac{557}{70} \right)}^{0.75} \\
\end{align*}\)
We are now able to plot the speed advantage that a rider weighing m2 would have over a rider m1 < m2, given that the two riders have similar physical abilities (e.g. same body fat mass). We could plot this function for any m1,m2 but I’m basically looking for a gradient that would equate chances for almost all professional riders, so I’m going to select m1 = 57kg (Joaquim Rodriguez) and m2 = 80kg (André Greipel) from the two most different riders I can think of. We get:

speed advantage lighter rider
Speed advantage for rider weighing 57kg over equal level rider weighing 80kg (in pp.)

On this graph, we see that under hypothesis H1 (blue curve), the function giving the speed advantage for the lighter rider remains always negative, which means it is always better to be more powerful, even if you have to drag an additional charge while climbing (this is quite surprising, and I think we could use this result to dismiss H1… but a physiologist would qualify way more than me to discuss this particular point!). The curve we get under hypothesis H2 (red curve) is far more interesting. It shows that when the road is flat or faux plat, the more powerful rider has an edge, but for steep slopes (10% and more), the lighter the better. And it between, there exists a “limit gradient”, which confirms what I initially suspected. Yay!

6% : the golden gradient

The “limit gradient” appears to be between 5% and 10%. Now we can write a few lines of code (in R) to determine its exact value. We get:

gradient_lim ~ 6.15 %

According to our model, this means that if a race includes hill whose gradient is approximately 6%, Rodriguez and Greipel stand equal chances of being the fastest (and so probably all the riders in between these very different two champions). In particular, when the finish line of a race is drawn at the top of a climb, it could be really interesting to choose a 6% gradient: below, it would be typically a sprinters-type finish and above, a climbers-type finish. Incidentally, this happens to be roughly the gradient of the final hill of the 2015 World Championships held in Richmond this Sunday! Well done, Virginia!

Elevation map road circuit Richmond 2015. © UCI Road World Championships
Elevation map road circuit Richmond 2015. © UCI Road World Championships

What about amateurs ?

If I want to do this analysis again for riders of my level, all I need to do is compute the constants according to my Strava data. Turns out on ~1.5 km hills, I can develop approximately 250W, and I weigh 70kg. I get:

gradient_lim ~ 4.9 %

Although it’s not very rigorous, I can confirm that of the (very) few KOMs/not-so-bad-performances I hold on Strava, all of them occurred on slopes with gradients lower than 4%.

Of course, I don’t pretend that the values for the “limit gradients” I find are an exact measure, and always should be the gradient of final hills on every race. For starters, there are a lot of parameters that I didn’t take into account :
– the length of the hill (I voluntarily did not say a word about the fact that different riders could react very differently to hills presenting the same gradient but different lengths)
– that top-level riders may not have exactly the same physical abilities (for example in terms of body fat percentage) when their riding styles are different
– that I’m not sure that Kleiber’s law is really valid in this context? From what I understand, it was primarily designed for evolutionary biology, not for physiology, but I couldn’t find better.
– and of course, that who wins a bike race depends more on the profile of the race before the final sprint, which after all is the very nature of this beautiful sport!

Still, I think we can reasonably assert that in general a 2-3 % gradient is not enough to discourage powerful riders from sprinting, and that a 8-9 % gradient largely favors the Rodriguez-like riders of the pack! And if anyone holds a dataset that could enable me to check this hypothesis, I’d be very happy!

[Sampling] De l’instantanéité des sondages

Ces derniers jours une application de “sondages” fait beaucoup parler d’elle dans les médias traditionnels : elle agacerait les instituts de sondages – je ne sais pas pour eux, mais ça nous a plutôt désespéré – et serait un baromètre de l’opinion pour les Républicains avant leur primaire – contrairement aux apparences, nous parlons d’une application française, GOV.

Cette application permet deux choses : tout d’abord, un peu à la façon d’un Tinder de la politique, les utilisateurs peuvent donner une opinion positive ou négative à propos de certaines personnalités politiques, souvent nationales : le Président, Manuel Valls, Christiane Taubira, Marine le Pen, Nicolas Sarkozy, Alain Juppé… Il est également possible de proposer des questions – des débats – auxquels les autres utilisateurs peuvent répondre en indiquant leur accord, avec un +, ou leur désaccord, avec un -. Ces débats peuvent concerner différents sujets : la politique, évidemment, mais aussi la société, la religion, les technologies…

Dernière précision : après téléchargement de l’application, un compte utilisateur doit être créé. On nous demande pour cela un pseudonyme, une adresse mail, puis de spécifier notre sexe, notre département, notre date de naissance et (de façon optionnelle) notre orientation politique, de l’extrême droite à l’extrême gauche en passant par le centre.

Tout cela est bien sympathique ; mais nous ne croyons pas une seule seconde aux résultats obtenus par cette application. Nous allons expliquer par la suite pourquoi nous n’y croyons pas, mais aussi donner quelques pistes d’améliorations pour chacun des problèmes, parce que nous n’aimons pas laisser notre prochain dans l’embarras.

Vérifier les utilisateurs

Commençons par le commencement. Si l’on souhaite avoir une information sur une population, par exemple combien de personnes en France ont une opinion positive de François Hollande, il faut commencer par s’assurer de deux choses sur la population : que l’on interroge bien des personnes qui existent et que ces personnes sont dans la population d’intérêt. Ici, il faudrait vérifier que les gens sont bien en France – cela n’a pas l’air d’être le cas, mais peut-être que les magasins d’applications bloquent le téléchargement hors de France, donc accordons le bénéfice du doute à l’application. La deuxième question est bien plus compliquée, car on ne peut pas demander un papier d’identité à tous les utilisateurs, mais elle est généralement réglée de deux manières différentes : soit en utilisant un autre service comme identifiant – Google, Facebook, etc – ce qui est une possibilité ici, soit en demandant une adresse mail pour y envoyer un mail afin de valider l’inscription, ce qui permet de montrer que ce n’est pas un robot qui vote. Cela laisse le problème de l’unicité, car une personne peut avoir plusieurs adresses mail, mais cela le limite néanmoins : les gens ont une dizaine d’adresses mail au maximum, ce qui ne suffira pas forcément à perturber les résultats.

Que se passe t-il sur GOV ? Eh bien, j’ai pu me créer le compte suivant afin d’aller donner mon avis sur François Hollande. Et si j’avais voulu, j’aurais pu me créer les comptes miaou1@miaou.fr à miaou99999@miaou.fr en automatisant le processus pour aller voter 100000 fois en faveur de François Hollande, pour perturber les analystes politiques de notre pays.

Miaou@miaou

Comment pallier ce problème ? A minima, demander une validation par mail pour éviter l’utilisation d’adresses mail stupides comme la mienne, et si possible trouver un moyen d’éviter les doublons – authentification via adresse de téléchargement de l’application, par exemple.

Changer de sexe – et de date de naissance ?

Le but de l’application n’est pas uniquement de connaître ce pourcentage de votes positifs sur la France entière, il y a également des résultats pour certaines sous-populations : les hommes et les femmes, principalement, sur chacun des départements français, ainsi que selon les orientations politiques. Je n’ai pas trouvé de résultats par âge, mais j’imagine que cela pourrait arriver. J’ai donc renseigné mes informations de façon tout à fait sérieuse. Aujourd’hui, je serai donc une jeune femme de 19 ans vivant à Blois et activement en faveur de l’extrême droite.

Loir et Cher

Aucune de ces informations n’a été vérifiée. Cela peut sembler normal pour l’orientation politique : le vote est secret, et c’est de toute façon facultatif. Mais le sexe, la date de naissance, la position géographique ? Nous pouvons faire encore mieux. Ce(tte) “miaoumiaou” va pouvoir changer d’avis sur la politique (aucun problème), déménager de Blois à Mérignac (cela arrive régulièrement), de sexe (admettons !), mais aussi de date de naissance (???).

Gironde

Comment pallier ce problème ? Il faut récupérer les informations à partir d’une source plus fiable : par exemple, les profils sur les réseaux sociaux. En revanche, les questions de modification des caractéristiques des personnes sondées sont toujours un problème difficile. Il convient de distinguer celles qui ne peuvent pas changer (sauf cas exceptionnels) : sexe, date de naissance… Pour ces caractéristiques, on peut interdire les changements ou à la limite accorder un changement, mais une seule fois. Pour les autres caractéristiques telles que la ville de résidence ou les opinions politiques, les modifications doivent être autorisées, mais il faut une limite aux modifications : je peux changer d’avis politique toutes les deux heures sur GOV, et ainsi les résultats n’ont aucune valeur.

Combien sommes-nous ?

Si l’on en juge par les classements qui se trouvent dans l’onglet Profil, nous étions dans les 10 000 meilleurs après quelques votes, on peut donc estimer que le nombre d’utilisateurs de l’application est entre 10 000 et, allez, 20 000. Cela représente un nombre suffisant pour avoir un avis sur une question si tout le monde y répondait, mais vu le nombre de personnalités politiques et de débats présents sur l’application, cela n’est pas une hypothèse crédible. Un premier problème est donc que les résultats obtenus ne sont pas suffisamment précis : on voit dans l’image ci-dessous que 245 personnes ont voté dans les dernières 24h sur le débat que nous avons créé, ce qui n’est absolument pas suffisant pour avoir l’information pour la totalité de la population française. Mathématiquement, cela veut dire que la variance de notre estimateur est trop forte : 76% des répondants croient aux statistiques de l’INSEE, mais on ne peut rien en déduire de plus précis que ceci : “entre 65% et 87% des français croient aux statistiques de l’INSEE”. Sauf que c’est faux, parce qu’il y a des biais induits par la réponse ou non, mais nous en parlerons plus tard.

245govs

Et pour “ajouter l’injure à l’insulte”, comme on dit chez les jeunes, l’application nous propose même les résultats ventilés selon les différentes orientations politiques. Par exemple, pour la question sur l’INSEE que nous avions posé, nous avons les résultats suivants.

Politique

Nous voyons bien l’intérêt de ce graphique : on aurait envie de dire que les français partisans des partis traditionnels (Gauche, Droite) ont plus confiance dans les institutions et donc dans l’INSEE que ceux des partis d’extrême droite et gauche. Et bien cette analyse n’a absolument aucun fondement. Pourquoi ? Car non seulement comme évoqué précédemment il n’y a pas assez de répondants pour avoir une estimation précise, mais surtout parce qu’on ne sait pas comment sont répartis les répondants au sein des catégories. On sait uniquement que 100% des votants d’extrême droite ne croient pas aux statistiques de l’INSEE, mais on ne sait pas si cela représente 1, 5 ou 50 personnes. On ne peut donc rien en déduire.

Comment pallier ce problème ? À part évidemment attendre qu’il y ait plus de monde (certains débats ont moins de 10 votants, donc autant dire absolument aucune valeur), il serait possible d’au moins d’afficher les effectifs pour toutes les sous-catégories pour avoir une idée de la répartition des votes.

J’ai changé d’avis !

Si vous avez bien suivi, le point précédent n’aurait pas dû être un problème. Il y a plus de 10000 comptes d’utilisateurs inscrits, donc pourquoi est-ce que la plupart des débats et des hommes politiques sont aux alentours de 250-500 “govs”, avec peut-être 1000 au maximum ? Cela vient du fait que le compteur qui est communiqué aux utilisateurs ne concerne que les votes dans les dernières 24 heures, ce qui explique pourquoi le nombre n’augmente pas au fur et à mesure. Pourquoi avoir fait ce choix ? Cela est probablement lié au concept d’instantanéité, car il est possible de revoter toutes les 24 heures pour suivre au plus près l’actualité politique.

Il est donc possible de redonner son avis. Cela veut dire qu’il est possible d’en changer ou de garder le même d’un jour sur l’autre, et cela veut aussi dire que potentiellement les 500 “govs” sur certains sujets proviennent des mêmes personnes d’une journée sur l’autre. Que peut-on déduire de l’évolution sur l’image suivante ? (Réponse : rien.)

Ségolène Royal

Comment pallier ce problème ? Ce n’est pas forcément un problème, certains sondages sont réalisés de cette manière, ce sont les études en panel ou cohorte : on interroge les personnes à des dates différentes, et on s’intéresse à l’évolution entre ces différentes dates. Le fait de réinterroger les mêmes personnes permet de limiter l’aléatoire et donc d’avoir des résultats plus précis que de re-choisir au hasard des individus. Cependant, il faudrait alors être sûr que les individus sont bien toujours les mêmes, et cela n’enlève rien au problème lié au nombre de répondants ou aux autres problèmes qui arrivent dans la suite de l’article.

Comment vote t-on dans le Loir-et-Cher ?

Eh bien, par exemple sur notre question les résultats dans le département (initial) de miaoumiaou sont les suivants. Les barres en gris clair signifient qu’aucun répondant n’est de cette orientation politique dans ce département.

Vote dans le département

Je pense qu’il n’y aura pas besoin d’un grand discours pour en conclure que c’est totalement inutilisable.

Comment pallier ce problème ? Il ne faut pas diffuser d’information à un niveau aussi fin, et se limiter par exemple à un Paris/Province, ou au moins par région.

Je ne suis pas intéressé par la religion

Sur l’application GOV, il est possible de choisir pour qui et quoi on vote. Par exemple, si je ne suis pas du tout intéressé par les questions sur la religion, il me suffit de parcourir uniquement les autres catégories de débats et je n’aurai pas à donner mon avis sur les questions sur le sujet. Cela pourrait ne pas être grave, mais cela pose un problème assez classique en sondages et plus largement en théorie des comportements. C’est celui de la non-réponse non-ignorable. Prenons un exemple.

Cigarettes

Cette question est déséquilibrée : les individus auront des tendances à vouloir répondre qui sont différentes selon leurs caractéristiques. Raisonnons de façon schématique. Si je suis fumeur, j’ai envie d’indiquer que je suis contre le paquet plus cher. Si je ne suis pas fumeur, j’ai moins d’intérêt dans la question, mais peut-être que je veux arrêter le tabagisme passif et donc que je suis pour. En moyenne, les fumeurs répondront plus souvent que les non-fumeurs. Le résultat final est alors biaisé en faveur du non, et donc pas directement exploitable !

Comment pallier ce problème ? Il y a deux manières différentes de s’attaquer à cette problématique. La première, c’est de ne pas laisser ce choix et de “forcer” les individus à répondre aux questions qui leur sont soumises, par exemple aléatoirement : l’inconvénient est que cela limite la convivialité de l’application, et cela n’empêche pas les gens de quitter l’application et de ne pas répondre de toute façon quand ils ne sont pas intéressés. L’autre solution c’est d’utiliser les caractéristiques socio-démographiques et les profils de réponse des individus pour corriger de la non-réponse, par exemple dans notre exemple analyser qui est fumeur et non-fumeur pour rétablir l’équilibre des réponses, et s’approcher du “vrai” pourcentage d’avis pour le paquet à 10€.

Le “calage” des réponses

Je vais essayer d’éviter d’utiliser le mot “représentatif” dans ce paragraphe ! Les individus inscrits sur l’application GOV ne sont pas nécessairement un portrait de la population française. Par exemple, il n’y a peut-être pas 50% d’hommes et 50% de femmes, et probablement trop de jeunes par rapport à la vraie pyramide des âges de la population française. Or, tout individu de plus de 50 ans qui vote sur l’application a le même impact qu’un jeune, ce qui ne permet pas d’avoir des résultats sur la population entière.

Comment pallier ce problème ? Il est possible d’utiliser des techniques dites de calage sur marges, c’est à dire d’adapter l’impact des votes des individus en fonction de leurs caractéristiques socio-démographiques pour faire en sorte que ceux minoritaires parmi les inscrits aient un poids plus important que les autres. Cela permettrait ainsi de conclure à partir des inscrits à GOV sur la population entière.

J’adore donner mon avis !

Il reste un problème encore plus important que ce qui a été mentionné dans les deux points précédents. En effet, le fait de télécharger ou non cette application est en soi une décision raisonnée d’un individu, et donc ce choix dépend de ses caractéristiques. On peut imaginer par exemple que les individus les plus politisés auront envie de donner leur avis sur les personnalités politiques plus souvent que les autres, ce qui crée également un biais non-ignorable sur les résultats. Le problème, c’est que la question de la politisation n’est pas forcément facilement déductible des caractéristiques socio-démographiques, et que donc les techniques de calages ne suffisent pas.

Comment pallier ce problème ? Il existe quelques méthodologies assez avancées permettant de résoudre le problème, mais la méthode la plus simple consiste soit à interroger quelques personnes sur leur utilisation ou non de l’application pour connaître les caractéristiques qui font que l’on a envie de voter sur GOV, ou de réaliser une expérience aléatoire, en demandant aux gens par exemple dans le cadre d’un sondage par téléphone ou dans la rue de répondre à un débat de GOV, puis en comparant le résultat obtenu avec celui de l’application.

Conclusion (TL;DR)

Les résultats affichés par l’application GOV ne sont pas crédibles car ils souffrent d’un manque de sérieux concernant le champ des personnes interrogées, d’un manque de précision et de biais relatifs aux caractéristiques des utilisateurs par rapport à la population. Cependant, le concept est intéressant, et avec quelques modifications comme celles que nous avons suggérées dans cet article, il serait tout à fait possible d’aboutir à des résultats sérieux. On verra ce qu’il en sera dans une éventuelle version 2 ?

[Games] Pourquoi la France perd toujours à l’Eurovision ?

Spoiler alert : C’est parce que nous sommes directement qualifiés en finale alors que la plupart des autres pays sont sélectionnés en demi-finale.

“L’Eurovision c’est un concours européen de chanson et à la fin c’est la France qui perd”

Cette année a beau avoir été meilleure pour la France à l’Eurovision que la précédente, de nombreux articles n’ont pas manqué de souligner la contre performance de la représentante française à Vienne. Celle-ci (qui, selon ses propres mots, “a les boules”) a terminé à la 25ème place sur 27, avec un score de 4 points, tandis que la Suède finit première avec 365 points. C’est assez décourageant, mais nous allons voir ici que cela est entièrement dû aux règles de qualification et pas à France 3.

Un bref rappel des règles

L’Eurovision est donc un concours musical créé en 1956 auquel peuvent participer la plupart des pays européens. Ceux-ci envoient un artiste ou un groupe pour interpréter une chanson sur scène lors d’une soirée qui a généralement lieu fin mai, chaque année. Ensuite, chaque pays vote pour les chansons et les interprètes qu’il a préférés, et attribue ainsi de 1 à 12 points à un autre pays. Les points attribués sont affichés comme suit (profitons-en pour remercier l’Arménie !).

Points Arménie 2015

Ces votes sont pour moitié issus d’un jury de spécialistes réunis par la chaîne de télévision diffusant l’Eurovision dans le pays en question, et pour l’autre moitié viennent du vote par téléphone au sein du pays. N’oubliez pas que bien que le but soit de sélectionner la chanson préférée des européens, de nombreux votes vont en direction des pays frontaliers et alliés, ce qui permet de réviser sa géopolitique à peu de frais.

C’est d’ailleurs souvent un des arguments avancés pour expliquer nos échecs répétés de ces dernières années : nous n’aurions pas de véritable “bloc” de vote comme pourraient en avoir les pays scandinaves, ou les pays de l’ex-bloc soviétique. L’étude des votes permet de détecter des cliques de votants, et ainsi de faire émerger ces structures de bloc : on peut lire par exemple cette étude sur le sujet.

Mais ce n’est pas le sujet dont je veux parler ici – bien que j’espère pouvoir en faire une autre note de blog très bientôt ! Je n’ai en effet pas fini d’expliquer les règles de la compétition. Ces dernières années, de plus en plus de pays souhaitent participer à l’Eurovision. Or, la soirée n’était pas extensible, il est nécessaire de limiter le nombre de prestations ayant lieu avant les votes. C’est pourquoi il a été décidé d’organiser deux demi-finales avant la soirée finale afin de présélectionner les pays. Cette année, 40 pays (dont l’Australie !) participaient au concours se déroulant à Vienne. Les deux demi-finales qui ont lieu les jours précédents ont départagé 17 et 16 pays respectivement (ce qui a conduit à quelques malheureuses pertes…). Si vous avez bien suivi, vous avez du remarquer que 17 + 16 ne font pas 40 : c’est qu’il existe une règle spéciale pour les membres du Big Five, c’est à dire la France, l’Espagne, le Royaume-Uni, l’Allemagne et l’Italie, qui sont automatiquement qualifiés pour la finale en raison de leur contribution plus importante au financement du concours. Un autre pays est automatiquement qualifié : il s’agit de l’organisateur, qui est le gagnant de l’année précédente. Enfin, pour ne pas déséquilibrer les demi-finales, l’Australie a également été automatiquement qualifiée en finale. Cela fait donc un total de 7 qualifiés pour la finale sans passer par les demi-finales.

Tant mieux ?

Je vous voir venir : “Mais c’est une bonne nouvelle, parce que vu notre niveau ridicule, on n’aurait aucune chance de jamais passer les demi-finales !”. Mais est-ce vraiment une si bonne nouvelle pour les performances de la France (et des autres pays qualifiés) ? Pour comprendre en quoi cela peut être une explication pour nos résultats catastrophiques, prenons un exemple très simple.

Imaginons un jeu entre 3 personnes, André, Bernard et Carine. Chacun tire une carte au hasard parmi 1-2-3, et celui ou celle qui a la plus grande valeur gagne. Dans ce cadre de figure, chacun a 1 chance sur 3 de gagner, et 2 chances sur 3 de perdre. Supposons maintenant que par galanterie, les hommes, André et Bernard, décident de jouer d’abord entre eux le droit de jouer contre Carine. Dans ce cas, chacun d’eux a 1/2 de gagner contre l’autre et d’accéder à la “finale” contre Carine. Une fois qu’André ou Bernard est qualifié en finale, quelle est la chance que Carine gagne contre lui ?

Une réponse naïve serait de dire qu’elle a toujours une chance sur 2, parce qu’elle ne saurait pas qu’il y a eu une compétition préliminaire entre les deux garçons. C’est faux, comme on peut le voir si on énumère les différentes possibilités :

André Bernard Qualifié Carine Gagnant
1 2 Bernard (2) 3 Carine
1 3 Bernard (3) 2 Bernard
2 3 Bernard (3) 1 Bernard
2 1 André (2) 3 Carine
3 2 André (3) 1 André
3 1 André (3) 2 André

On voit bien que Carine ne gagne son duel qu’une fois sur 3, uniquement quand elle a tiré le 3, ce qui est assez logique. Si on revient à l’Eurovision, que peut-on en déduire pour les pays qui sont qualifiés automatiquement ? Et bien, comme Carine, ils ont une tendance à perdre plus souvent que ce à quoi on s’attendrait (la fameuse chance sur 2), car ils sont directement en finale, sans que leur score ait été testé avant. Est-ce que cela pourrait expliquer pourquoi nous avons l’impression de toujours être en bas du tableau de scores ?

Nous allons faire quelques simulations (le calcul exact serait possible, mais je suis un flemmard…) pour évaluer l’impact que pourrait avoir cette qualification d’office sur le classement de la France et des autres pays du Big Five. Pour cela, nous reproduisons l’expérience des trois cartes évoquée précédemment en la généralisant : imaginons que chaque pays ait un carton avec un numéro de 1 à 40 indiquant quelle serait sa place si tout le monde participait à la finale (qui finirait alors à 3h du matin…).

Reproduisons ensuite le processus de sélection : parmi les 16 pays participant à la première demi-finale, les 10 meilleurs sont qualifiés pour la finale. Puis de façon analogue, parmi les 17 pays participant à la deuxième demi-finale, les 10 meilleurs sont qualifiés pour la finale.

Une fois ces phases de sélection terminées, la finale oppose 27 pays, les 20 qualifiés en demi-finale auxquels on rajoute la France, l’Espagne, le Royaume-Uni, l’Allemagne, l’Italie, l’Autriche et l’Australie. On peut maintenant en rangeant les cartons dans l’ordre connaître le tableau final de l’Eurovision. En reproduisant plusieurs centaines de milliers de fois ce processus, nous pouvons obtenir des résultats en moyenne sur les places des différents pays en finale, en utilisant la loi des grands nombres.

Ainsi, nous observons que sur 27 pays participants, un pays automatiquement qualifié comme la France arrive en moyenne à la 18ème place (17,7 pour être précis), tandis qu’un pays qui a du passer par la demi-finale finit en moyenne à la 13ème place (12,7) quand il réussit à accéder à la finale. Ainsi, être qualifié directement nous fait perdre 5 places en moyenne au classement final. Cela peut expliquer pourquoi nous avons tendance à rester dans les tréfonds du classement…

Plus spécifiquement, et cela a été un traumatisme pour nous l’an dernier, il est démoralisant de finir dernier du concours. Toujours en suivant ce processus de simulations, il est possible d’estimer la probabilité qu’un des 7 pays directement qualifiés soit dernier à l’Eurovision 2015. Nous obtenons le résultat assez impressionnant de 93,7% de chances pour un de ces 7 pays d’être dernier. Si l’on se restreint à un unique pays, au hasard la France, nous avions 13,5% de chance d’être derniers. En revanche, la probabilité pour un pays d’être premier est toujours de 1/27, peu importe que l’on soit directement qualifié ou pas : tout le monde a donc ses chances pour la prochaine organisation (cf l’Allemagne en 2010). Enfin, encore une fois, c’est en oubliant toutes les subtilités du vote géopolitique…

Et depuis 2000…

D’ailleurs, il est temps de comparer ces résultats avec la réalité. On se concentrera ici sur la période 2000-2015 car si l’on remonte trop loin dans le temps, il y a bien moins de pays participants et cette étude n’a donc plus vraiment de pertinence.

Quels ont été les scores moyens de la France ? et du Royaume-Uni, nos ennemis jurés ? Les données sont disponibles sur Wikipedia, pour la France et pour les Anglais. Un rapide calcul de moyenne nous permet d’obtenir les résultats suivants : la France a eu une place moyenne de 17,63 et le Royaume-Uni de 18,13. Bim les Anglais, retournez dans vos avions !

Toutes considérations de conflit franco-anglais mises à part, on s’aperçoit que nos simulations sont assez proches de la réalité, surtout pour la France. Ainsi, il semblerait que l’hypothèse communément admise que nos artistes ne sont pas adaptés au concours soit fausse : si nous réalisons de mauvais scores, c’est uniquement dû au système de qualification automatique. Le graphe suivant montre les résultats moyens des pays du Big Five pour les comparer avec les autres :

Graphe Eurovision

On voit bien qu’en moyenne les pays directement qualifiés sont bien derrière au classement, et que l’écart au classement varie chaque année, mais toujours en faveur des pays qui sont qualifiés par les demi-finales. Sur les 9 dernières éditions, les pays du Big Five ont été en moyenne 6 à 7 places derrières les autres, ce qui est un peu plus que prévu. Cela peut venir du vote géopolitique évoqué précédemment, ou juste d’une mauvaise série…

Qu’en est-il pour la dernière place ? Le tableau suivant récapitule les éditions depuis 2000 pour lesquels le pays arrivé dernier était automatiquement qualifié en finale :

2015 Autriche
2014 France
2010 Royaume-Uni
2008 Royaume-Uni
2005 Allemagne
2003 Royaume-Uni

(Remarque personnelle : Cette chanson de 2005 méritait vraiment de perdre. Bref.)

On a donc 6 chansons sur 16 qui sont à la dernière place qui viennent d’un des pays du Big Five ou de l’organisateur, soit 37,5% ce qui est bien loin des 93,7% estimés. On peut donc bien supposer que nos chansons sont moins nulles que ce à quoi on pourrait s’attendre. À part celles des Anglais, qui sont derniers 3 fois sur les 16, soit 18,8% du temps, alors qu’on avait estimé le risque à 13,5%. You suck, England!

[Sampling] Why you should never ever use the word “representative” about survey sampling

We often hear the term “representative”, which supposedly assesses the quality of a sample. In this article, I’ll try to show you that not only “representative” has no scientific meaning, but also it is misleading, especially for people who are not survey sampling specialists. This includes students, researchers in social science who use surveys, journalists, etc. I hope I’ll convince you to never use it again !

I’ll try to make this post understandable even if you don’t know the basics of survey sampling theory. Well, you might miss a thing or two, but I think my main arguments are perfectly understandable to anyone who has ever taken a course in statistics. And perhaps I’ll write an article later to explain the basics of survey sampling in layman’s terms 😉

The Horvitz-Thompson estimator

In this article, I’ll only speak about random sampling, which is the technique governments use to produce many official statistics. I will not speak about non-random methods like quota sampling or other techniques mostly used by market research companies.

Horvitz and Thompson provide us an unbiased estimator using sample data. Assuming you know \(\pi_k\), the inclusion probability of unit k, and you’re trying to measure the mean of \(Y\) using the \(y_k\) only known for units in the sample (s). The size of the sample is n, and the size of the population is N. Then the estimator:

\begin{align*}
\hat{\bar{Y}}_{HT} = \dfrac{1}{N} \sum_{k \in s} \dfrac{y_k}{\pi_k}
\end{align*}

is unbiased, as long as no inclusion probability equals 0.
The Horvitz-Thompson estimator can also be written:

\begin{align*}
\hat{\bar{Y}}_{HT} &= \dfrac{1}{N} \sum_{k \in s} d_k y_k \\
\text{with: } d_k &= \dfrac{1}{\pi_k}
\end{align*}

which means units are weighted by the inverse of their inclusion probability.

Do not plugin !

As you can see from the formula, the Horvitz-Thompson estimator is very different from the sample mean (ie the plugin estimator), which writes:

\begin{align*}
\bar{y} = \dfrac{1}{n} \sum_{k \in s} y_k
\end{align*}

This means that in general, if you estimate a mean by direclty using the sample mean, you end up with bias. I think that saying a randomly selected sample is “representative” of the studied population suggests that you could use the plugin estimator, no matter what the inclusion probabilities are. After all, if you claim your sample is somehow a valid “scale model” of the population, why couldn’t simple stats such as means, totals or even quantiles of variables of interest be directly inferred from the stats in the sample ?

The only case when the plugin estimator is unbiased is when all inclusion probabilities are equal. But with equal probabilities, rare characteristics are very unlikely to be selected which is (paradoxically) why you’ll very seldom hear someone use the term “representative” speaking of a sample selected with equal probabilities. Besides…

Sample = goal

… you can obtain much better precision (or, alternatively, much lower costs) by using unequal inclusion probabilities. Stratified sampling and cluster/two-stage sampling are way more common than simple random sampling for this reason.

The most telling example is perhaps stratified sampling for business surveys. Imagine a business sector when you can regroup businesses into two groups. Your goal is to estimate the mean revenue, by sampling 100 units out of 1090. Key figures for the population of my example are gathered in the following table:

Group Revenue range (M$) Dispersion of revenue N
“Big” businesses 50 – 50000 300 100
“Small” businesses 0 – 50 10 990

One of the best sampling designs you can use is stratified sampling (with a SRS in each stratum) using the optimal allocation. Neyman’s theorem gives the inclusion probabilities for the optimal allocation:

Group Inclusion probability for every unit in group
« Big » businesses 75%
« Small » businesses 2,5%

Inclusion probabilities are way different between the two groups ! Another way to see this: one only sample cannot provide good estimates for every variable you could think of. In our example, optimal inclusion probabilities would certainly be very different if we tried to estimate (for example) the number of businesses that were created less than a year ago. The best expected precision for a variable depends on the sampling design. And to assess this expected precision, there’s no other choice than to think in terms of bias and variance. There are formulas for precision estimation, but “representativity” is by no means a statistical concept.

The sample is not required to be similar to the population

This point is directly related to the previous one: inclusion probabilities are designed to optimize the estimator of one variable (or possibly a few variables with high correlation). Neyman’s theorem also gives this optimal allocation, i.e. how you should divide your 100 sampled units between the two groups :

Group Share of the population Share of the sample (optimal allocation)
« Big » businesses 9,2% 75%
« Small » businesses 88,8% 25%

If you look at the final allocation, we have a huge over-representation of “big” businesses, in comparison of their relative number in the population. However, this is the optimal allocation, meaning that this sample will lead to the best possible estimator for revenue.

Consequently, the sample is not required to “look like” the population for the estimator to be good… in our example it is in fact quite the contrary !

Conclusion

Estimation in survey sampling can be somewhat counter-intuitive. If you want to be as rigorous as a statistician should be, think in statistical terms, such as bias and variance. And when you speak about survey sampling, ban words which have no statistical meaning, such as “representative” or “representativity”.