Comprendre les probabilités et les statistiques qui peuvent être utilisées pour la gestion des progrès avec un programme python

question 1

Quel est le nombre total de lancers lorsque vous lancez les dés 100 fois?

game_sugoroku_9570.png

Valeur moyenne / attendue

La moyenne apprise à l'école primaire est le sommet des statistiques. Premièrement, utilisez la moyenne pour dériver la réponse à la première question et la comparer avec les résultats de la simulation.

programme

import numpy as np
import numpy.random as rd
import matplotlib.pyplot as plt

#Définir un dé
#Connaître la moyenne
dice = [1, 2, 3, 4, 5, 6]
print("moyenne:", np.mean(dice))

#Définir le nombre de tentatives
#Vous pouvez voir la valeur attendue du total en combinaison avec la moyenne
trialsNum = 100
print("Valeur attendue totale:", np.mean(dice) * trialsNum)
input("Appuyez sur Entrée pour continuer. . .")

#Essayez en fait
#Dessinez un histogramme pour vérifier la distribution des rouleaux
resultList = [rd.choice(dice) for i in range(trialsNum)]
plt.hist(resultList, bins=6, rwidth=0.8, range=(0.5, 6.5))
plt.show()

print("total:", np.sum(resultList))

Résultat d'exécution (exemple)

Le résultat n'est pas constant car il utilise des nombres aléatoires.

Moyenne de l'échantillon: 3.5
Valeur attendue totale: 350.0
Appuyez sur Entrée pour continuer. . .

dice1.png

total: 355

Commentaire

Le nombre moyen de lancers que vous pouvez obtenir lorsque vous lancez les dés une fois est de 3,5, vous pouvez donc répondre à la première question que le total de 100 lancers est d'environ 350, soit 100 fois la moyenne. Vous pouvez gérer la progression comme suit en utilisant la valeur moyenne / attendue.

  1. Obtenir la moyenne (= rythme de progression) de la quantité de tâches consommées par unité de ressource (personne-jour, etc.) à partir des résultats antérieurs
  2. Multipliez le montant des ressources restantes disponibles par la date d'échéance par le rythme de progression pour trouver la quantité attendue de tâches pouvant être digérées.
  3. Comparez la valeur attendue avec le ** montant de la tâche restant qui doit être achevé à la date d'échéance pour juger de la progression **

Mais est-il normal de laisser la comparaison et le jugement à l'expérience et à l'intuition humaines? Vous pouvez utiliser le graphe déroulant pour voir les tendances au fil du temps, mais vous comptez toujours sur l'expérience et l'intuition.

Dispersion / écart type

Environ 350 ... Vous pouvez répondre à la première question.

Environ 350 ... Combien vaut "environ 350"? Ceci est représenté par la variance / l'écart type. Tout d'abord, trouvez l'écart type de l'échantillon, puis trouvez l'écart type des résultats de la simulation et comparez-les.

programme

import numpy as np
import numpy.random as rd
import matplotlib.pyplot as plt

#Définir un dé
#Connaître la moyenne et la variance
dice = [1, 2, 3, 4, 5, 6]
print("Moyenne de l'échantillon:", np.mean(dice))
print("Dispersion des échantillons:", np.var(dice))

#Définir le nombre de tentatives
#Vous pouvez voir la valeur attendue du total en combinaison avec la moyenne de l'échantillon
#Peut prédire l'écart type total en combinaison avec la variance de l'échantillon
trialsNum = 100
print("Valeur attendue totale:", np.mean(dice) * trialsNum)
print("Écart type total (attendu):", np.sqrt(np.var(dice) * trialsNum))
input("Appuyez sur Entrée pour continuer. . .")

#Essayez en fait...Essayer
metaTrialsNum = 10000
resultList = [np.sum([rd.choice(dice) for i in range(trialsNum)])
              for i in range(metaTrialsNum)]
myMean = np.mean(resultList)
myStd = np.std(resultList)
print("Moyenne du total:", myMean)
print("Écart type total (réel):", myStd)

# 68–95–99.Vérifiez si les 7 règles s'appliquent
win = [len([n for n in resultList if myMean - r * myStd <= n and n <= myMean + r * myStd]) /
       metaTrialsNum for r in range(1, 4)]
print(
    f'μ±σ : {myMean - 1 * myStd :.1f} ~ {myMean + 1 * myStd:.1f}: {win[0]:.2%}')
print(
    f'μ±2σ: {myMean - 2 * myStd :.1f} ~ {myMean + 2 * myStd:.1f}: {win[1]:.2%}')
print(
    f'μ±3σ: {myMean - 3 * myStd :.1f} ~ {myMean + 3 * myStd:.1f}: {win[2]:.2%}')

#Dessinez un histogramme pour voir la distribution totale
plt.hist(resultList, bins=25)
plt.show()

Résultat d'exécution (exemple)

Le résultat n'est pas constant car il utilise toujours des nombres aléatoires.

Moyenne de l'échantillon: 3.5
Dispersion des échantillons: 2.9166666666666665
Valeur attendue totale: 350.0
Écart type total (attendu): 17.078251276599328
Appuyez sur Entrée pour continuer. . .

Figure_1.png

Moyenne du total: 349.9814
Écart type total (réel): 17.034108548438923
μ±σ : 332.9 ~ 367.0: 69.69%
μ±2σ: 315.9 ~ 384.0: 95.77%
μ±3σ: 298.9 ~ 401.1: 99.76%

Commentaire

La distribution totale s'intègre parfaitement dans 68–95–99.7 Rule C'est devenu une distribution. L'écart type d'environ 17 montre à quel point il est «d'environ 350». Et l'écart type peut être obtenu à partir de l'échantillon sans simulation.

Erreur de fonction erf

À partir de la règle 68–95–99,7, nous avons trouvé la probabilité que le résultat de l'essai se situe dans cette plage lorsque x de μ ± xσ était 1,2,3. Alors ne connaissez-vous pas la probabilité lorsque x est égal à 1,5? Ou connaissez-vous la probabilité que le nombre total de rouleaux soit de 370 ou plus? C'est là qu'intervient la fonction d'erreur erf. Illustrons ci-dessous comment cette fonction fonctionne dans le programme python.

programme

import math
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-4.0, 4.1, 0.1)

leg1 = "μ-xσ ≦ a ≦ μ+xσ"
y1 = [math.erf(i/math.sqrt(2)) for i in x]
p1 = plt.plot(x, y1)

leg2 = "a ≦ μ+xσ"
y2 = [0.5 + 0.5 * math.erf(i/math.sqrt(2)) for i in x]
p2 = plt.plot(x, y2)

leg3 = "μ+xσ ≦ a"
y3 = [0.5 - 0.5 * math.erf(i/math.sqrt(2)) for i in x]
p3 = plt.plot(x, y3)

plt.legend((p1[0], p2[0], p3[0]),
           (leg1, leg2, leg3), loc=0)
plt.grid(True)
plt.show()

Résultat d'exécution

Figure_1.png

Commentaire

La fonction d'erreur erf vous permet de calculer la probabilité que le résultat de l'essai soit compris entre μ ± xσ et inférieur ou égal à μ + xσ pour tout x.

Ou connaissez-vous la probabilité que le nombre total de rouleaux soit de 370 ou plus?

Il peut être trouvé en utilisant la fonction d'erreur erf Tout d'abord, trouvez la valeur de x en appliquant les valeurs à μ et σ dans l'équation suivante.

μ+xσ = 370

Valeur totale attendue: 350,0 Écart type total (estimé): 17,078251276599328

350+17x = 370 17x = 20 x = 1.18

Vous pouvez ensuite calculer la probabilité en appliquant une valeur à x dans la formule utilisée dans votre programme.

0.5 - 0.5 * math.erf(i/math.sqrt(2)

0.5 - 0.5 * erf(1.18/√2) = 0.12 = 12%

Lorsque vous lancez les dés 100 fois, il y a 12% de chances que le nombre total de lancers soit supérieur à 370. Avec la fonction moyenne, écart type et erreur, vous pouvez maintenant répondre à la première question.

question 2

Jusqu'où l'équipe qui a progressé au rythme indiqué dans le tableau ci-dessous progressera-t-elle à l'achèvement de l'itération 20?

Itération Rapidité Accumulation
1 7 7
2 3 10
3 3 13
4 6 19
5 6 25

Valeur moyenne / attendue

μ = 200, n'est-ce pas?

Dispersion / écart type

Puisque la variance jusqu'à l'itération 5 est de 3,5, l'écart type jusqu'à l'itération 20 peut être supposé être σ = √ (3,5 * 20) ≒ 8,4. La plage de μ ± 3σ est d'environ 175 à 225.

Erreur de fonction erf

Si vous répondez avec une précision d'environ 80%, disons 191 avec μ-1σ (arrondi vers le bas). Si l'objectif de progression jusqu'à l'itération 20 est supérieur à cela, vous devez négocier pour abaisser l'objectif à 191.

Si vous répondez avec une précision de 99%, disons 175 avec μ-3σ. Si votre objectif est de 225, il n'y a pas 1% de chances que vous soyez à temps. Même si l'objectif est de 200, la probabilité d'être à temps est de 50%, ce qui correspond à cinquante-cinquante. Il est facile de se blesser quand on juge que "Si vous continuez au rythme moyen, vous serez à temps!"

Étant donné que μ et σ fluctuent au fur et à mesure que les réalisations de progrès s'accumulent, calculons la probabilité d'aller au-delà de la cible avec la fonction d'erreur erf à tout moment. Contrairement aux dés, il n'y a pas de spécimen parfait.

L'unité de quantité de ressource est facile s'il s'agit du nombre d'itérations, mais si vous souhaitez la rendre plus détaillée, vous pouvez également la calculer par le nombre de jours ou d'hommes-jours.

Recommended Posts

Comprendre les probabilités et les statistiques qui peuvent être utilisées pour la gestion des progrès avec un programme python
[Python] Un programme pour trouver le nombre de pommes et d'oranges qui peuvent être récoltées
J'ai créé un modèle de projet Python générique
Optimisation mathématique pour un travail gratuit avec Python + PuLP
[Python] Un programme qui trouve le nombre maximum de jouets pouvant être achetés avec votre argent
J'ai écrit un tri-arbre qui peut être utilisé pour l'implémentation de dictionnaire à grande vitesse en langage D et Python
Notes sur les connaissances Python utilisables avec AtCoder
Article qui peut être une ressource humaine qui comprend et maîtrise le mécanisme de l'API (avec du code Python)
[Python] Créez un graphique qui peut être déplacé avec Plotly
Un minuteur (ticker) qui peut être utilisé sur le terrain (peut être utilisé n'importe où)
J'ai fait un shuffle qui peut être réinitialisé (inversé) avec Python
Module standard Python utilisable en ligne de commande
[Python] Dessinez des données d'altitude sur une surface sphérique avec Plotly et dessinez un globe qui peut être tourné en rond et en rond
J'ai acheté et analysé la loterie jumbo de fin d'année avec Python qui peut être exécutée dans Colaboratory
À propos du fait que le résumé de la torche peut être vraiment utilisé lors de la construction d'un modèle avec Pytorch
[Pour les débutants] Statistiques de baseball dont on peut se souvenir en 33 minutes et 4 secondes et PyData ~ avec Yojima Steel
[Python] Un programme qui crée des escaliers avec #
[Python] Un programme qui arrondit le score
2.Faites un arbre de décision à partir de 0 avec Python et comprenez-le (2. Bases du programme Python)
À propos du fait que l'objet recompilé peut être utilisé pour le modèle re.match
[Python] Un programme qui trouve une paire qui peut être divisée par une valeur spécifiée
[Python] Un programme qui calcule le nombre de chaussettes jumelées
Un mémo lors de la création d'un environnement qui peut être débogué avec Lambda @ Edge pour le moment
[Python] Code qui peut être écrit avec la mort cérébrale au début lors du scraping en tant que débutant
Types de fichiers pouvant être utilisés avec Go
Fonctions pouvant être utilisées dans l'instruction for
Programme pour rechercher la même image
Notes pour créer des figures pouvant être publiées dans des revues avec matplotlib
Classe pour PYTHON qui peut être utilisée sans connaître LDAP
Programme d'installation facile et programme de mise à jour automatique pouvant être utilisé dans n'importe quelle langue
Comment installer la bibliothèque Python qui peut être utilisée par les sociétés pharmaceutiques
[Python] Un programme qui trouve les valeurs minimales et maximales sans utiliser de méthodes
[Python] Un programme qui calcule le nombre de mises à jour des enregistrements les plus élevés et les plus faibles
Présentation et fonctionnalités utiles de scikit-learn qui peuvent également être utilisées pour l'apprentissage en profondeur
Automatisez la suppression de l'arrière-plan pour les derniers portraits dans un répertoire avec Python et API
Solution de contournement pour Flask-Mail n'envoyant pas de courrier japonais UTF-8 (Python3)
Convertir des images du SDK FlyCapture en un formulaire pouvant être utilisé avec openCV
[Python] Un programme qui compte le nombre de vallées
[Python] Construire un environnement pour la programmation de compétition avec Atom (input () peut être utilisé!) [Mac]
Un programme qui demande quelques kilogrammes pour atteindre l'IMC et le poids standard [Python]
Pour pouvoir utiliser le japonais avec Python dans l'environnement Docker
Programme Python qui recherche le même nom de fichier
[Python] Introduction au scraping WEB | Résumé des méthodes pouvant être utilisées avec webdriver
Un mémo que j'ai touché au magasin de données avec python
Jusqu'à ce que vous puissiez installer Blender et l'exécuter avec python pour le moment
Dans Python3.8 et versions ultérieures, le mod inverse peut être calculé avec la fonction intégrée pow.
Serveur de partage de fichiers réalisé avec Raspberry Pi pouvant être utilisé pour le travail à distance
[Python] Un programme qui compare les positions des kangourous.
Statistiques simples qui peuvent être utilisées pour analyser l'effet des mesures sur les sites EC et les codes qui peuvent être utilisés dans le notebook jupyter
J'ai créé un outil pour générer automatiquement un diagramme de transition d'état pouvant être utilisé à la fois pour le développement Web et le développement d'applications
Installez Mecab et CaboCha sur ubuntu16.04LTS afin qu'il puisse être utilisé à partir de la série python3
[Django] Noms de champs pouvant être utilisés pour le modèle utilisateur, l'enregistrement des utilisateurs et les méthodes de connexion
[Atcoder] [C ++] J'ai fait un outil d'automatisation de test qui peut être utilisé pendant le concours
Comment définir des variables pouvant être utilisées dans toute l'application Django ~ Utile pour les modèles, etc. ~
Procédure d'installation pour Python et Ansible avec une version spécifique
Ce que vous pouvez faire avec les statistiques de la bibliothèque Python standard
Goroutine (contrôle parallèle) utilisable sur le terrain