446 votes

Quelles statistiques un programmeur (ou un informaticien) doit-il connaître ?

Je suis un programmeur avec une bonne formation en mathématiques et en informatique. J'ai étudié la calculabilité, la théorie des graphes, l'algèbre linéaire, l'algèbre abstraite, les algorithmes, et un peu de probabilités et de statistiques (à travers quelques cours de CS) au niveau du premier cycle universitaire.

J'ai cependant l'impression de ne pas en savoir assez sur les statistiques. Les statistiques sont de plus en plus utiles en informatique, le traitement statistique du langage naturel aidant à alimenter certains des algorithmes de recherche et de traduction automatique de Google, l'analyse des performances du matériel, des logiciels et des réseaux nécessitant des bases statistiques appropriées pour être crédible, et des domaines comme la bioinformatique devenant chaque jour plus répandus.

J'ai lu comment "Google utilise le filtrage bayésien comme Microsoft utilise l'instruction if" et je connais le pouvoir des approches statistiques simples, même assez naïves, des problèmes de Paul Graham. Un plan pour le spam y Un meilleur filtrage bayésien mais j'aimerais aller plus loin.

J'ai essayé d'apprendre plus de statistiques, mais je me suis un peu perdu. Le site Article de Wikipedia propose une longue liste de sujets connexes, mais je ne suis pas sûr de ceux que je devrais examiner. D'après ce que j'ai vu, une grande partie des statistiques partent du principe que tout est une combinaison de facteurs qui se combinent linéairement, plus un certain bruit aléatoire dans une distribution gaussienne ; je me demande ce que je devrais apprendre au-delà de la régression linéaire, ou si je devrais prendre le temps de vraiment comprendre cela avant de passer à d'autres techniques. J'ai trouvé quelques longues listes de livres à consulter ; par où dois-je commencer ?

Je me demande donc où aller à partir de là, ce qu'il faut apprendre et où l'apprendre. En particulier, j'aimerais savoir :

  1. À quel type de problèmes de programmation, d'ingénierie logicielle et d'informatique les méthodes statistiques sont-elles bien adaptées ? Où vais-je obtenir les meilleurs résultats ?
  2. Quel type de méthodes statistiques devrais-je consacrer à l'apprentissage ?
  3. Quelles ressources dois-je utiliser pour apprendre cela ? Livres, articles, sites web. J'apprécierais une discussion sur le sujet de chaque livre (ou autre ressource) et sur sa pertinence.

Pour clarifier ce que je recherche, je suis intéressé par les problèmes que programmeurs Il s'agit généralement de déterminer si une approche statistique peut être bénéfique, et quels types d'outils statistiques peuvent être utiles. Par exemple :

  • Les programmeurs doivent fréquemment traiter de grandes bases de données de textes en langues naturelles, et aider à les catégoriser, les classer, les rechercher et les traiter de toute autre manière. Quelles techniques statistiques sont utiles dans ce cas ?
  • Plus généralement, l'intelligence artificielle s'est éloignée des approches discrètes et symboliques pour se tourner vers les techniques statistiques. Quelles sont les approches statistiques de l'intelligence artificielle qui ont le plus à offrir aujourd'hui au programmeur professionnel (par opposition aux recherches en cours qui peuvent ou non fournir des résultats concrets) ?
  • On demande souvent aux programmeurs de produire des systèmes performants, qui s'adaptent bien à la charge. Mais on ne peut pas vraiment parler de performances si on ne peut pas les mesurer. Quel type de conception expérimentale et d'outils statistiques devez-vous utiliser pour pouvoir affirmer avec certitude que les résultats sont significatifs ?
  • La simulation de systèmes physiques, comme dans l'infographie, implique fréquemment une approche stochastique.
  • Y a-t-il d'autres problèmes couramment rencontrés par les programmeurs qui bénéficieraient d'une approche statistique ?

227voto

Ian Fellows Points 8013

Question intéressante. En tant que statisticien dont l'intérêt se rapproche de plus en plus de l'informatique, je pourrais peut-être vous faire part de quelques réflexions...

  1. N'apprenez pas test d'hypothèse fréquentiste . Bien que la majeure partie de mon travail soit effectuée dans ce paradigme, il ne correspond pas aux besoins des entreprises ou de l'extraction de données. Les scientifiques ont généralement des hypothèses spécifiques en tête et peuvent souhaiter évaluer la probabilité que, si leur hypothèse n'est pas vraie, les données soient aussi extrêmes qu'elles le sont. C'est rarement le type de réponse que recherche un informaticien.

  2. Bayesien est utile même si vous ne savez pas pourquoi vous utilisez les prieurs que vous utilisez. Une analyse baysienne peut vous donner une estimation précise de la probabilité pour diverses éventualités, mais il est important de réaliser que la seule raison pour laquelle vous avez cette estimation précise est que vous avez pris une décision floue concernant la probabilité antérieure. (Pour ceux qui ne sont pas au courant, avec l'inférence baysienne, vous pouvez spécifier une probabilité antérieure arbitraire et la mettre à jour en fonction des données collectées pour obtenir une meilleure estimation).

Apprentissage automatique et classification pourrait être un bon point de départ. La littérature sur l'apprentissage automatique est davantage axée sur les problèmes informatiques, bien que sa mission soit presque identique à celle des statistiques ( voir : http://anyall.org/blog/2008/12/statistics-vs-machine-learning-fight/ ).

Puisque vous avez parlé de grandes bases de données avec un grand nombre de variables, voici quelques algorithmes qui s'avèrent utiles dans ce domaine.

  • adaboost : Si vous avez un grand nombre de classificateurs merdiques, et que vous voulez faire un bon classificateur. (voir aussi logit boost)
  • Machines à vecteurs de support : Un classificateur puissant et flexible. Peut apprendre des modèles non linéaires (ok linéaire dans l'espace non linéaire du noyau si vous voulez être pointilleux à ce sujet).
  • voisin le plus proche (k) : Un algorithme simple mais puissant. Il ne s'adapte pas bien à l'échelle, mais il existe des alternatives plus proches du voisin qui ne sont pas aussi pathologiques.
  • CART : Cet algorithme partitionne les données en fonction d'un certain nombre de variables prédictives. Il est particulièrement efficace s'il y a des interactions entre les variables, ou s'il existe un très bon prédicteur qui ne fonctionne que sur un sous-ensemble des données.
  • Régression par le moindre angle : si la valeur que vous essayez de prédire est continue et que vous avez beaucoup de données et beaucoup de prédicteurs.

Cette liste n'est en aucun cas complète, mais elle devrait vous donner un bon point de départ. Un livre très bon et accessible sur le sujet est Duda, Hart, Stork : Classification des motifs

En outre, une grande partie des statistiques est constituée de visualisations et d'analyses descriptives. Celles-ci présentent un intérêt particulier pour le programmeur car elles lui permettent de transmettre des informations à l'utilisateur. En R, ggplot2 est mon paquet de choix pour créer des visualisations. Du côté de l'analyse descriptive (et utile dans l'analyse de texte), il y a l'échelonnement multidimensionnel qui peut donner une interprétation spatiale de données non spatiales (par exemple, l'idéologie des sénateurs). http://projecteuclid.org/DPubS?service=UI&version=1.0&verb=Display&handle=euclid.aoas/1223908041 ).

102voto

Stefano Borini Points 36904

C'est juste une remarque, pas une critique, mais votre question devrait être formulée d'une manière différente : "quelles statistiques devraient tout personne ne le sait ?".

Le fait est que, malheureusement, nous avons tous affaire à des statistiques. C'est une réalité de la vie. Les sondages, les prévisions météorologiques, l'efficacité des médicaments, les assurances et, bien sûr, certaines parties de l'informatique. Être capable d'analyser de manière critique les données présentées permet de choisir la bonne compréhension ou de se faire arnaquer, quoi que cela signifie.

Cela dit, je pense qu'il est important de comprendre les points suivants

  • la moyenne, la médiane, l'écart-type d'un échantillon, et la différence entre échantillon y population (c'est très important)
  • les distributions, et pourquoi la distribution gaussienne est si importante (le théorème de la limite centrale)
  • Ce que signifie le test de l'hypothèse nulle.
  • Qu'est-ce que la transformation des variables, la corrélation, la régression, l'analyse multivariée.
  • Qu'est-ce que la statistique bayésienne ?
  • Méthodes de traçage.

Tous ces points sont essentiels non seulement pour vous en tant qu'informaticien, mais aussi en tant qu'être humain. Je vais vous donner quelques exemples.

  • L'évaluation de l'hypothèse nulle est essentielle pour tester l'efficacité d'une méthode. Par exemple, si un médicament fonctionne, ou si une réparation de votre matériel informatique a eu un résultat concret ou si c'est juste une question de chance. Disons que vous voulez améliorer la vitesse d'une machine, et que vous changez le disque dur. Ce changement est-il important ? Vous pourriez faire un échantillonnage des performances avec l'ancien et le nouveau disque dur, et vérifier les différences. Même si vous trouvez que la moyenne avec le nouveau disque est plus basse, cela ne signifie pas que le disque dur a un effet du tout. C'est là qu'intervient le test de l'hypothèse nulle, qui vous donnera un intervalle de confiance, et non une réponse définitive, du type : il y a une probabilité de 90 % que le changement de disque dur ait un effet concret sur les performances de votre machine.

  • La corrélation est importante pour savoir si deux entités "évoluent de la même façon". Comme l'enseigne le mantra Internet "corrélation n'est pas causalité", elle doit être prise avec précaution. Le fait que deux variables aléatoires présentent une corrélation ne signifie pas que l'une cause l'autre, ni qu'elles sont liées par une troisième variable (que vous ne mesurez pas). Elles pourraient simplement se comporter de la même manière. Cherchez les pirates et le réchauffement climatique pour comprendre le propos. Une corrélation rend compte d'une possible le signal, il ne rapporte pas de constat.

  • Bayésien. Nous connaissons tous le filtre anti-spam. Mais il y a plus. Supposons que vous passiez un examen médical et que le résultat vous dise que vous avez un cancer (j'espère vraiment que ce n'est pas le cas, mais c'est pour illustrer mon propos). Le fait est que : la plupart des gens à ce moment-là penseraient "j'ai un cancer". Or, ce n'est pas le cas. Un test de dépistage du cancer positif fait passer votre probabilité d'avoir un cancer de la valeur de référence pour la population (disons, 8 personnes sur mille ont un cancer, chiffre choisi au hasard) à une valeur plus élevée, qui n'est pas de 100 %. La hauteur de cette valeur dépend de la précision du test. Si le test est mauvais, il se peut que vous ne soyez qu'un faux positif. Plus la méthode est précise, plus le biais est élevé, mais il n'est toujours pas de 100 %. Bien sûr, si plusieurs tests indépendants confirment tous que vous avez un cancer, il est très probable que vous l'ayez réellement, mais ce n'est toujours pas 100 %. C'est peut-être 99,999 %. C'est un point que beaucoup de gens ne comprennent pas dans les statistiques bayésiennes.

  • Méthodes de traçage. C'est une autre chose qui est toujours laissée sans surveillance. L'analyse des données ne signifie rien si vous ne pouvez pas transmettre efficacement ce qu'elles signifient via un simple graphique. En fonction des informations que vous souhaitez mettre en évidence, ou du type de données dont vous disposez, vous préférerez un graphique xy, un histogramme, un graphique en forme de violon ou un graphique circulaire.

Maintenant, passons à vos questions. Je pense que j'ai trop abusé d'une note rapide, mais comme ma réponse a été beaucoup votée, je pense qu'il vaut mieux que je réponde correctement à vos questions dans la mesure de mes connaissances (et voici les vacances, donc je peux me permettre d'en abuser autant que je veux).

Quel genre de problèmes en programmation, l'ingénierie logicielle, et l'informatique informatique, les méthodes statistiques sont adaptées ? Où vais-je obtenir les plus grands bénéfices ?

Normalement, tout ce qui a trait à la comparaison de données qui implique des données numériques (ou réduites à des données numériques) provenant de sources non fiables. Un signal provenant d'un instrument, un tas de pages et le nombre de mots qu'elles contiennent. Lorsque vous obtenez ces données, et que vous devez trouver une réponse distillée dans le tas, vous avez besoin de statistiques. Pensez par exemple à l'algorithme de détection des clics sur l'iPhone. Vous utilisez un stylet tremblant et gros pour vous référer à une icône qui est beaucoup plus petite que le stylet lui-même. Il est clair que le matériel (écran capacitif) va vous envoyer un tas de données sur le doigt, plus un tas de données sur un bruit aléatoire (l'air ? je ne sais pas comment ça marche). Le pilote doit donner un sens à ce désordre et vous donner une coordonnée x,y sur l'écran. Cela nécessite (beaucoup) de statistiques.

Quel type de méthodes statistiques devrais-je passer mon temps à apprendre ?

Celles que je vous ai dites sont plus que suffisantes, aussi parce que pour les comprendre, il faut passer par d'autres choses.

Quelles ressources dois-je utiliser pour apprendre cela ? Livres, articles, sites web. J'aimerais apprécierais une discussion sur ce que chaque de chaque livre (ou autre ressource), et pourquoi c'est pertinent.

J'ai appris les statistiques principalement dans le cadre de cours universitaires standard. Mon premier livre était le " livre "train wreck ", et c'est très bon. J'ai aussi essayé celui-ci qui se concentre sur R mais il ne m'a pas particulièrement satisfait. Il faut connaître les choses et le R pour s'en sortir.

Les programmeurs ont souvent besoin de traiter de grandes bases de données de textes en langues naturelles, et aider à catégoriser, classer, rechercher, et de les traiter. Quelles techniques statistiques techniques statistiques sont utiles ici ?

Cela dépend de la question à laquelle vous devez répondre en utilisant votre ensemble de données.

On demande souvent aux programmeurs de de produire des systèmes performants, qui qui s'adaptent bien à la charge. Mais vous ne pouvez pas vraiment parler de performances sans que si vous pouvez les mesurer. Quel type de plan d'expérience et d'outils statistiques devez-vous utiliser pour être en mesure de dire avec confiance que les résultats sont significatifs ?

Les mesures posent de nombreux problèmes. Mesurer est un art fin et délicat. Une mesure correcte est presque impossible à réaliser. Le fait est que l'échantillonnage introduit un biais, soit du fait de l'échantillonneur, soit du fait de la méthode, soit du fait de la nature de l'échantillon, soit du fait de la nature de la nature. Un bon échantillonneur sait tout cela et tente de réduire au maximum les biais indésirables pour obtenir une distribution aléatoire.

Les exemples tirés du blog que vous avez publié sont pertinents. Disons que vous avez un temps de démarrage pour une base de données. Si vous prenez des mesures de performance pendant cette période, toutes vos mesures seront biaisées. Il n'y a pas de méthode statistique qui puisse vous le dire. Seule votre connaissance du système le peut.

Y a-t-il d'autres problèmes communs rencontrés par les programmeurs qui pourraient bénéficieraient d'une approche statistique ?

Chaque fois que vous avez un ensemble de producteurs de données, vous avez des statistiques, donc l'informatique scientifique et l'analyse de données sont évidemment un endroit. L'informatique scientifique et l'analyse des données en font évidemment partie. La folksonomie et le réseautage social ne sont pratiquement que des statistiques. Même stackoverflow est, dans un certain sens, statistique. Le fait qu'une réponse soit fortement votée ne signifie pas que c'est la bonne. Cela signifie qu'il y a une forte probabilité qu'elle soit juste, selon l'évaluation d'un ensemble statistique d'évaluateurs indépendants. Le comportement de ces évaluateurs fait la différence entre stackoverflow, reddit et digg.

28voto

MaD70 Points 2902

Je n'ai pas grand-chose à ajouter, mais il se trouve que je viens de commencer à lire ce livre : D. S. Sivia avec J. Skilling, Analyse des données - un tutoriel bayésien ', 2e édition, 2006, Oxford University Press .

Ce qui a attiré mon attention est la préface, où l'auteur fait référence à une insatisfaction commune à ceux qui abordent l'étude des statistiques :

Préface

En tant qu'étudiant, j'ai toujours trouvé le sujet des statistiques comme étant plutôt mystérieux. Ce sujet n'était pas entièrement nouveau pour moi, puisqu'on nous avait enseigné un un peu de probabilité plus tôt au lycée ; par exemple, j'étais déjà familiarisé avec la distribution binomiale, Poisson et normale. La plupart du temps, tout cela avait du sens, mais semblait seulement se rapporter à des choses comme lancer des dés, lancer des pièces de monnaie, mélanger des cartes, etc. et ainsi de suite. Cependant, ayant l'ambition de devenir un scientifique, ce que je voulais vraiment ce que je voulais vraiment savoir, c'était comment analyser données expérimentales. Ainsi, j'ai attendu avec impatience j'attendais avec impatience le conférences sur statistiques . Malheureusement, ils étaient un grand déception . Bien que de nombreux les tests et les procédures exposés étaient intuitivement raisonnables, il y avait quelque chose de profondément insatisfaisant dans l'ensemble de l'affaire : il ne semblait pas y avoir de pas de principes de base sous-jacents ! C'est pourquoi le cours sur les "probabilités et statistiques " avait conduit à une malheureuse dichotomie : la probabilité avait un sens, mais c'était juste un jeu ; les statistiques étaient importante, mais c'était un ensemble déroutant collection de tests avec peu de rime ou raison évidente. . Bien que n'étant pas pas heureux de cette situation, j'ai décidé de mettre le sujet de côté et de me concentrer sur la vraie science. Après Après tout, cette situation difficile n'était que le le reflet de mes propres insuffisances et je n'aurais qu'à y travailler lorsque le le moment venu de vraiment analyser mes données.

L'histoire ci-dessus n'est pas seulement la mienne, mais c'est l'expérience bien trop commune de nombreux scientifiques. Heureusement, il n'a pas à être comme ça . Ce qu'on ce qu'on ne nous a pas dit dans nos cours de premier cycle c'est qu'il existe une approche alternative à l'ensemble du l'analyse des données qui utilise uniquement la théorie des probabilités. Dans un Dans un sens, cela rend le sujet de la statistiques tout à fait superflues. Dans d'autre part, elle fournit la justification logique la justification logique de nombreux tests et procédures statistiques les plus répandus procédures, en rendant explicites les conditions et approximations implicitement supposées dans leur utilisation .

Ce livre est destiné à être un tutoriel guide de cette approche bayésienne alternative alternative, y compris les développements développements modernes tels que l'entropie maximale.

...

J'espère que ce livre tiendra ses promesses.

Voici quelques chapitres de la première édition en avant-première aquí d'un cours de psychologie cognitive et d'intelligence artificielle dans lequel ce livre a été adopté, et d'autres documents du même cours. aquí . Logiciels connexes du deuxième auteur aquí . Vous trouverez également un aperçu plus détaillé sur Google Books aquí .

23voto

Mike Dunlavey Points 25419

Bon sang, certaines de ces réponses sont bonnes. Je viens à peu près du même milieu et j'ai dû m'initier à la biostatistique en grande partie dans les livres et par osmose avec mes collègues. Voici mes recommandations :

  • Commencez par acquérir de solides bases en probabilité, notamment la probabilité conditionnelle, le théorème de Bayes, les modèles de Markov et certaines des distributions statistiques de base.

  • Si vous ne l'avez pas, apprenez l'algèbre linéaire, pour ne pas être effrayé par les matrices. Si vous êtes confronté à des problèmes d'algèbre et de calcul, mettez-y du vôtre et travaillez. Le jeu en vaut la chandelle.

  • La théorie des statistiques se divise en deux camps, les fréquentistes et les bayésiens. La théorie fréquentiste est plus ancienne et solide. La théorie bayésienne est plus récente, plus souple et plus passionnante. En particulier, il y a les choses passionnantes qui peuvent être faites avec la chaîne de Markov Monte Carlo et les techniques connexes.

Dans mon domaine, la pharmacométrie, la capacité d'extraire des résultats significatifs de données éparses et coûteuses est très rentable, et les compétences en statistiques sont donc très importantes.

Ajouté : voici quelques livres préférés (liste non exhaustive) :

20voto

Mitch Wheat Points 169614

Plus de probabilités que de statistiques, mais Probabilité bayésienne peut être très utile (elle est à la base des filtres anti-spam) et, selon l'OMI, davantage de logiciels devraient l'utiliser pour déduire les habitudes d'un utilisateur.

Statistiques Head First est un excellent livre pour apprendre les statistiques (un mathématicien/statisticien m'informe qu'il ne comporte pas tant quelques erreurs que quelques simplifications de la partie théorique).

J'ai presque oublié de mentionner : Comment mentir avec les statistiques

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X