Partie 3: modéliser

La facilité à modéliser des processus très diverses a grandement participé au succès de Python. La librairie scikit offre une grande variété de modèles et permet ainsi d’avoir un code fonctionnel en très peu de temps.

Introduction
Modélisation
Author

Lino Galiana

Published

2024-04-27

Les data scientists sont souvent associés à la mise en oeuvre de modèles complexes d’intelligence artificielle. Le succès médiatique de ce type d’outils, notamment ChatGPT, n’y est pas pour rien. Cependant, la modélisation n’est souvent qu’une phase du travail du data scientist, un peu comme la visualisation. D’ailleurs, dans certaines organisations où la division des tâches est plus poussée, les data engineers sont au moins aussi impliqués dans la phase de modélisation que les data scientists.

C’est souvent un péché de jeunesse de penser qu’on peut résumer le travail du data scientist exclusivement à la phase de modélisation. Cette dernière dépend très fortement de la qualité du travail de nettoyage et structuration des données mis en oeuvre en amont. La mise en oeuvre de modèles complexes, qui s’accomodent de données peu structurées, est gourmande en ressources et coûteuse. Ce ne sont donc qu’un nombre limité d’acteurs qui peuvent entraîner, ex nihilo, des grands modèles de langage1, capables de dépenser au moins 300 000 dollars dans l’entraînement d’un modèle, avant même toute phase d’inférence (Izsak, Berchansky, and Levy 2021). Ces besoins computationnels pour entraîner de grands modèles de langage sont d’ailleurs assez gourmands en énergie, ce qui peut amener à des empreintes carbones non négligeables (Strubell, Ganesh, and McCallum 2019; Arcep 2019).

Heureusement, il est possible de mettre en oeuvre des modélisations plus légères (celles que nous présenterons dans les prochains chapitres) ou de réutiliser des modèles pré-entraînés pour les spécialiser sur un nouveau jeu de données (principe du fine tuning2). En fait, pour être plus pertinent que des approches plus parcimonieuses, les techniques de deep learning, notamment les réseaux de neurones, nécessitent soit des volumes de données très importants (des millions voire dizaine de millions d’observations) soit des données à la structure complexe comme le langage naturel ou les images. Dans de nombreux cas, des modèles plus simples comme les techniques d’apprentissage automatique (machine learning) suffisent largement.

La modélisation, une approche au coeur de la statistique

Un modèle statistique est une représentation simplifiée et structurée d’un phénomène réel, construite à partir d’observations regroupées dans un ensemble partiel de données.

Un modèle vise à capturer les relations et les schémas sous-jacents au sein de ces données, permettant ainsi de formuler des hypothèses, d’effectuer des prédictions et d’extrapoler des conclusions au-delà de l’ensemble de données mesurées. Les modèles statistiques fournissent ainsi un cadre analytique pour explorer, comprendre et interpréter les informations contenues dans les données. Dans le domaine de la recherche économique, ils peuvent servir à associer certains paramètres structurants des modèles de comportement économique à des valeurs quantitatives. Les modèles statistiques, comme les modèles économiques présentent néanmoins toujours une part d’irréalisme (Friedman 1953; Salmon 2010) et accepter de manière trop littérale les implications d’un modèle, même s’il a de bonnes performances prédictives, peut être dangereux et relever d’un biais scientiste. On sélectionne plutôt le moins mauvais modèle que le vrai processus générateur des données.

Représenter la réalité sous la forme d’un modèle est un principe à la base de la statistique comme discipline scientifique et ayant des applications dans de nombreux champs disciplinaires : économie, sociologie, géographique, biologie, physique, etc. Selon les disciplines, le nom donné peut varier mais on retrouve régulièrement la même approche scientifique : le modélisateur construit des relations entre plusieurs variables théoriques ayant des contreparties empiriques afin d’expliquer tel ou tel processus.

Dans l’enseignement de l’ENSAE ce type d’approche empirique se retrouve principalement dans deux types d’approches : le machine learning et l’économétrie. La différence est certes sémantique - la régression linéaire peut être considérée comme une technique de machine learning ou d’économétrie - mais elle est également conceptuelle :

  • Dans le domaine du machine learning, la structure imposée par le modélisateur est minimale et ce sont plutôt les algorithmes qui, sur des critères de performance statistique, vont amener à choisir une loi mathématique qui correspond au mieux aux données ;
  • En économétrie, les hypothèses de structure des lois sont plus fortes (même dans un cadre semi ou non-paramétrique) et sont plus souvent imposées par le modélisateur.

Dans cette partie du cours, nous allons principalement parler de machine learning car il s’agit d’une perspective plus opérationnelle que l’économétrie qui est plus directement associée à des concepts statistiques complexes comme la théorie asymptotique.

L’adoption du machine learning dans la littérature économique a été longue car la structuration des données est souvent le pendant empirique d’hypothèses théoriques sur le comportement des acteurs ou des marchés (Athey and Imbens 2019; Charpentier, Flachaire, and Ly 2018). Pour caricaturer, l’économétrie s’attacherait à comprendre la causalité de certaines variables sur une autre. Cela implique que ce qui intéresse l’économètre est principalement de l’estimation des paramètres (et l’incertitude sur l’estimation de ceux-ci) qui permettent de quantifier l’effet d’une variation d’une variable sur une autre. Toujours pour caricaturer, le machine learning se focaliserait sur un simple objectif prédictif en exploitant les relations de corrélations entre les variables. Dans cette perspective, l’important n’est pas la causalité mais le fait qu’une variation de \(x\)% d’une variable permette d’anticiper un changement de \(\beta x\) de la variable d’intérêt ; peu importe la raison. Mullainathan and Spiess (2017) ont ainsi, pour simplifier, proposé la différence fondamentale qui suit : l’économétrie se préoccupe de \(\widehat{\beta}\) là où le machine learning se focalise sur \(\widehat{y}\). Les deux sont bien sûr reliés dans un cadre linéaire mais cette différence d’approche a des implications importantes sur la structure des modèles étudiés, notamment leur parcimonie3.

Quelques définitions

Dans cette partie du cours nous allons employer un certain nombre de termes devenus familiers aux praticiens du machine learning mais qui méritent d’être explicités.

Machine learning et deep learning

Jusqu’à présent nous avons beaucoup utilisé, sans le définir, le concept de machine learning, dont la traduction française est apprentissage automatique mais le terme anglo-saxon est suffisamment utilisé pour être considéré comme standard.

Le machine learning est un ensemble de techniques algorithmiques qui permettent aux ordinateurs d’apprendre, à partir d’exemples, à ajuster un modèle sans avoir explicitement défini celui-ci. A partir d’algorithmes itératifs et d’une métrique de performance, des règles de classification ou de prédiction vont permettre de mettre en relation des caractéristiques (features) avec une variable d’intérêt (label)4.

De nombreux algorithmes existent et se distinguent sur la manière d’introduire une structure plus ou moins formelle dans la relation entre les variables observées. Nous n’allons voir que quelques-uns de ces algorithmes : support vector machine (SVM), régression logistique, arbres de décision, forêts aléatoires, etc. Simples à mettre en oeuvre grâce à la librairie Scikit-Learn, ils permettront déjà de comprendre la démarche originale du machine learning que vous pourrez approfondir ultérieurement.

Au sein de la grande famille des algorithmes de machine learning, tendent de plus à plus à devenir autonomes les techniques de réseaux de neurone. Les techniques qui s’appuient sur les réseaux de neurones sont regroupés dans une famille qu’on appelle deep learning (apprentissage profond en Français). Ces réseaux sont inspirés du fonctionnement du cerveau humain et sont composés de nombreuses couches de neurones interconnectés. La structure canonique bien connue est illustrée dans la Figure 1. Le deep learning est intéressant pour créer des modèles capables d’apprendre de représentations de données complexes et abstraites à partir de données brutes, ce qui évite parfois la complexe tâche de définir manuellement des caractéristiques spécifiques à cibler. Les champs de l’analyse d’image (computer vision) ou du traitement du langage naturel sont les principaux cas d’application de ces méthodes.

Figure 1: Exemple de structure d’un réseau de neurones (source: lebigdata.fr)

Nous n’allons pas vraiment parler dans ce cours de deep learning car ces modèles, pour être pertinents, nécessitent soit des données structurées d’un volume important (ce qui est rarement disponible en open data) soit des cas d’usage spécifiques, plus avancés que ne le permet un cours d’introduction. L’organisation HuggingFace, créatrice de la plateforme du même nom facilitant la réutilisation de modèles de deep learning propose d’excellents cours sur le sujet, notamment sur le traitement du langage naturel (NLP). Nous ferons du traitement du langage naturel dans la prochaine partie de ce cours mais de manière plus modeste en revenant sur les concepts nécessaires avant de mettre en oeuvre une modélisation sophistiquée du langage.

Apprentissage supervisé ou non supervisé

Une ligne de clivage importante entre les méthodes à mettre en oeuvre est le fait d’observer ou non le label (la variable \(y\)) qu’on désire modéliser.

Prenons par exemple un site de commerce qui dispose d’informations sur ses clients comme l’âge, le sexe, le lieu de résidence. Ce site peut désirer exploiter cette information de différentes manières pour modéliser le comportement d’achat.

En premier lieu, ce site peut désirer anticiper le volume d’achat d’un nouveau client ayant certaines caractéristiques. Dans ce cas, il est possible d’utiliser les montants dépensés par d’autres clients en fonction de leurs caractéristiques. L’information pour notre nouveau client n’est pas mesurée mais elle peut s’appuyer sur un ensemble d’observations de la même variable.

Mais il est tout à fait possible d’entraîner un modèle sur un label qu’on ne mesure pas, en supposant qu’il fasse sens. Par exemple notre site de commerce peut désirer déterminer, en fonction des caractéristiques de notre nouveau client et de sa clientèle existante, s’il appartient à tel ou tel groupe de consommateurs : les dépensiers, les économes… Bien sûr on ne sait jamais a priori à quel groupe appartient un consommateur mais le rapprochement entre consommateurs ayant un comportement similaire permettra de donner du sens à cette catégorie. Dans ce cas, l’algorithme apprendra à reconnaître quelles caractéristiques sont structurantes dans la constitution de groupes au comportement similaire et permettra d’associer tout nouveau consommateur à un groupe.

Ces deux exemples illustrent l’approche différente selon qu’on essaie de construire des modèles sur un label observé ou non. Cela constitue même l’une des dualités fondamentale dans les techniques de machine learning :

  • Apprentissage supervisé : la valeur cible est connue et peut être utilisée pour évaluer la qualité d’un modèle ;
  • Apprentissage non supervisé : la valeur cible est inconnue et ce sont des critères statistiques qui vont amener à sélectionner la structure de données la plus plausible.

Cette partie du cours illustrera ces deux approches de manière différente à partir du même jeu de données, les résultats des élections américaines. Dans le cas de l’apprentissage supervisé, nous chercherons à modéliser directement le résultat des candidats aux élections (soit le score soit le gagnant). Dans le cas de l’apprentissage non supervisé, nous essaierons de regrouper les territoires au comportement de vote similaire en fonction de facteurs socio-démographiques.

0.0.1 Classification et régression

Une deuxième dualité fondamentale qui est déterminante dans le choix de la méthode de machine learning à mettre en oeuvre est la nature du label. S’agit-il d’une variable continue ou d’une variable discrète, c’est-à-dire prenant un nombre limité de modalités ?

Cette différence de nature entre les données amène à distinguer deux types d’approche :

  • Dans les problématiques de classification, où notre label \(y\) a un nombre fini de valeurs5, on cherche à prédire dans quelle classe ou à quel groupe il est possible de rattacher nos données. Par exemple, si vous prenez du café le matin, faites-vous partie du groupe des personnes ronchons au lever ? Les métriques de performance utilisent généralement la proportion de bonnes ou mauvaises classifications pour estimer la qualité d’un modèle.
  • Dans les problématiques de régression, où notre label est une grandeur numérique, on cherche à prédire directement la valeur de notre variable dans le modèle. Par exemple, si vous avez tel ou tel âge, quel est votre dépense quotidienne en fast food. Les métriques de performance sont généralement des moyennes plus ou moins sophistiquées d’écarts entre la prédiction et la valeur observée.

En résumé, l’aide-mémoire suivante, issue de l’aide de Scikit-Learn, peut déjà donner de premiers enseignements sur les différentes familles de modèles :

Figure 2: Une cheatsheet des algorithmes disponibles dans Scikit-Learn

Données

La plupart des exemples de cette partie s’appuient sur les résultats des élections US 2020 au niveau comtés. Plusieurs bases sont utilisées pour cela :

  • Les données électorales sont une reconstruction à partir des données du MIT election lab proposées sur Github par tonmcg ou directement disponibles sur le site du MIT Election Lab
  • Les données socioéconomiques (population, données de revenu et de pauvreté, taux de chômage, variables d’éducation) proviennent de l’USDA (source)
  • Le shapefile vient des données du Census Bureau. Le fichier peut être téléchargé directement depuis cet url: https://www2.census.gov/geo/tiger/GENZ2019/shp/cb_2019_us_county_20m.zip

Le code pour construire une base unique à partir de ces sources diverses est disponible ci-dessous :

import urllib
import urllib.request
import os
import zipfile
from urllib.request import Request, urlopen
from pathlib import Path
import numpy as np
import pandas as pd
import geopandas as gpd

def download_url(url, save_path):
    with urllib.request.urlopen(url) as dl_file:
        with open(save_path, 'wb') as out_file:
            out_file.write(dl_file.read())


def create_votes_dataframes():
    
  Path("data").mkdir(parents=True, exist_ok=True)
  
  
  download_url("https://www2.census.gov/geo/tiger/GENZ2019/shp/cb_2019_us_county_20m.zip", "data/shapefile")
  with zipfile.ZipFile("data/shapefile", 'r') as zip_ref:
      zip_ref.extractall("data/counties")
  
  shp = gpd.read_file("data/counties/cb_2019_us_county_20m.shp")
  shp = shp[~shp["STATEFP"].isin(["02", "69", "66", "78", "60", "72", "15"])]
  shp
  
  df_election = pd.read_csv("https://raw.githubusercontent.com/tonmcg/US_County_Level_Election_Results_08-20/master/2020_US_County_Level_Presidential_Results.csv")
  df_election.head(2)
  population = pd.read_excel("https://www.ers.usda.gov/webdocs/DataFiles/48747/PopulationEstimates.xls?v=290.4", header = 2).rename(columns = {"FIPStxt": "FIPS"})
  education = pd.read_excel("https://www.ers.usda.gov/webdocs/DataFiles/48747/Education.xls?v=290.4", header = 4).rename(columns = {"FIPS Code": "FIPS", "Area name": "Area_Name"})
  unemployment = pd.read_excel("https://www.ers.usda.gov/webdocs/DataFiles/48747/Unemployment.xls?v=290.4", header = 4).rename(columns = {"fips_txt": "FIPS", "area_name": "Area_Name", "Stabr": "State"})
  income = pd.read_excel("https://www.ers.usda.gov/webdocs/DataFiles/48747/PovertyEstimates.xls?v=290.4", header = 4).rename(columns = {"FIPStxt": "FIPS", "Stabr": "State", "Area_name": "Area_Name"})
  
  
  dfs = [df.set_index(['FIPS', 'State']) for df in [population, education, unemployment, income]]
  data_county = pd.concat(dfs, axis=1)
  df_election = df_election.merge(data_county.reset_index(), left_on = "county_fips", right_on = "FIPS")
  df_election['county_fips'] = df_election['county_fips'].astype(str).str.lstrip('0')
  shp['FIPS'] = shp['GEOID'].astype(str).str.lstrip('0')
  votes = shp.merge(df_election, left_on = "FIPS", right_on = "county_fips")
  
  req = Request('https://dataverse.harvard.edu/api/access/datafile/3641280?gbrecs=false')
  req.add_header('User-Agent', 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:77.0) Gecko/20100101 Firefox/77.0')
  content = urlopen(req)
  df_historical = pd.read_csv(content, sep = "\t")
  #df_historical = pd.read_csv('https://dataverse.harvard.edu/api/access/datafile/3641280?gbrecs=false', sep = "\t")
  
  df_historical = df_historical.dropna(subset = ["FIPS"])
  df_historical["FIPS"] = df_historical["FIPS"].astype(int)
  df_historical['share'] = df_historical['candidatevotes']/df_historical['totalvotes']
  df_historical = df_historical[["year", "FIPS", "party", "candidatevotes", "share"]]
  df_historical['party'] = df_historical['party'].fillna("other")
  
  df_historical_wide = df_historical.pivot_table(index = "FIPS", values=['candidatevotes',"share"], columns = ["year","party"])
  df_historical_wide.columns = ["_".join(map(str, s)) for s in df_historical_wide.columns.values]
  df_historical_wide = df_historical_wide.reset_index()
  df_historical_wide['FIPS'] = df_historical_wide['FIPS'].astype(str).str.lstrip('0')
  votes['FIPS'] = votes['GEOID'].astype(str).str.lstrip('0')
  votes = votes.merge(df_historical_wide, on = "FIPS")
  votes["winner"] =  np.where(votes['votes_gop'] > votes['votes_dem'], 'republican', 'democrats') 

  return votes

Cette partie n’est absolument pas exhaustive. Elle constitue un point d’entrée dans le sujet à partir d’une série d’exemples sur un fil rouge. De nombreux modèles plus approfondis, que ce soit en économétrie ou en machine learning mériteraient d’être évoqués. Pour les personnes désirant en savoir plus sur les modèles économétriques, qui seront moins évoqués que ceux de machine learning, je recommande la lecture de Turrell and contributors (2021).

0.1 Références

Arcep. 2019. “L’empreinte Carbone Du Numérique.” Rapport de l’Arcep.
Athey, Susan, and Guido W Imbens. 2019. “Machine Learning Methods That Economists Should Know About.” Annual Review of Economics 11: 685–725.
Charpentier, Arthur, Emmanuel Flachaire, and Antoine Ly. 2018. “Econometrics and Machine Learning.” Economie Et Statistique 505 (1): 147–69.
Friedman, Milton. 1953. “The Methodology of Positive Economics.” In Essays in Positive Economics. Chicago: The University of Chicago Press.
Izsak, Peter, Moshe Berchansky, and Omer Levy. 2021. “How to Train BERT with an Academic Budget.” https://arxiv.org/abs/2104.07705.
Mullainathan, Sendhil, and Jann Spiess. 2017. “Machine Learning: An Applied Econometric Approach.” Journal of Economic Perspectives 31 (2): 87–106. https://doi.org/10.1257/jep.31.2.87.
Salmon, Pierre. 2010. “Le Problème Du réalisme Des Hypothèses En économie Politique.”
Strubell, Emma, Ananya Ganesh, and Andrew McCallum. 2019. “Energy and Policy Considerations for Deep Learning in NLP.” https://arxiv.org/abs/1906.02243.
Turrell, Arthur, and contributors. 2021. Coding for Economists. Online. https://aeturrell.github.io/coding-for-economists.

Informations additionnelles

environment files have been tested on.

Latest built version: 2024-04-27

Python version used:

'3.11.6 | packaged by conda-forge | (main, Oct  3 2023, 10:40:35) [GCC 12.3.0]'
Package Version
affine 2.4.0
aiobotocore 2.12.2
aiohttp 3.9.3
aioitertools 0.11.0
aiosignal 1.3.1
alembic 1.13.1
aniso8601 9.0.1
annotated-types 0.6.0
appdirs 1.4.4
archspec 0.2.3
astroid 3.1.0
asttokens 2.4.1
attrs 23.2.0
Babel 2.14.0
bcrypt 4.1.2
beautifulsoup4 4.12.3
black 24.4.2
blinker 1.7.0
blis 0.7.11
bokeh 3.4.0
boltons 23.1.1
boto3 1.34.51
botocore 1.34.51
branca 0.7.1
Brotli 1.1.0
cachetools 5.3.3
cartiflette 0.0.2
Cartopy 0.23.0
catalogue 2.0.10
cattrs 23.2.3
certifi 2024.2.2
cffi 1.16.0
charset-normalizer 3.3.2
chromedriver-autoinstaller 0.6.4
click 8.1.7
click-plugins 1.1.1
cligj 0.7.2
cloudpathlib 0.16.0
cloudpickle 3.0.0
colorama 0.4.6
comm 0.2.2
commonmark 0.9.1
conda 24.3.0
conda-libmamba-solver 24.1.0
conda-package-handling 2.2.0
conda_package_streaming 0.9.0
confection 0.1.4
contextily 1.6.0
contourpy 1.2.1
cryptography 42.0.5
cycler 0.12.1
cymem 2.0.8
cytoolz 0.12.3
dask 2024.4.1
dask-expr 1.0.10
debugpy 1.8.1
decorator 5.1.1
dill 0.3.8
distributed 2024.4.1
distro 1.9.0
docker 7.0.0
duckdb 0.10.1
en-core-web-sm 3.7.1
entrypoints 0.4
et-xmlfile 1.1.0
exceptiongroup 1.2.0
executing 2.0.1
fastjsonschema 2.19.1
fiona 1.9.6
flake8 7.0.0
Flask 3.0.2
folium 0.16.0
fontawesomefree 6.5.1
fonttools 4.51.0
frozenlist 1.4.1
fsspec 2023.12.2
GDAL 3.8.4
gensim 4.3.2
geographiclib 2.0
geopandas 0.12.2
geoplot 0.5.1
geopy 2.4.1
gitdb 4.0.11
GitPython 3.1.43
google-auth 2.29.0
graphene 3.3
graphql-core 3.2.3
graphql-relay 3.2.0
graphviz 0.20.3
great-tables 0.5.0
greenlet 3.0.3
gunicorn 21.2.0
h11 0.14.0
htmltools 0.5.1
hvac 2.1.0
idna 3.6
imageio 2.34.1
importlib_metadata 7.1.0
importlib_resources 6.4.0
inflate64 1.0.0
ipykernel 6.29.3
ipython 8.22.2
ipywidgets 8.1.2
isort 5.13.2
itsdangerous 2.1.2
jedi 0.19.1
Jinja2 3.1.3
jmespath 1.0.1
joblib 1.3.2
jsonpatch 1.33
jsonpointer 2.4
jsonschema 4.21.1
jsonschema-specifications 2023.12.1
jupyter-cache 1.0.0
jupyter_client 8.6.1
jupyter_core 5.7.2
jupyterlab_widgets 3.0.10
kaleido 0.2.1
kiwisolver 1.4.5
kubernetes 29.0.0
langcodes 3.4.0
language_data 1.2.0
lazy_loader 0.4
libmambapy 1.5.7
llvmlite 0.42.0
locket 1.0.0
lxml 5.2.1
lz4 4.3.3
Mako 1.3.2
mamba 1.5.7
mapclassify 2.6.1
marisa-trie 1.1.0
Markdown 3.6
MarkupSafe 2.1.5
matplotlib 3.8.3
matplotlib-inline 0.1.6
mccabe 0.7.0
menuinst 2.0.2
mercantile 1.2.1
mizani 0.11.2
mlflow 2.11.3
mlflow-skinny 2.11.3
msgpack 1.0.7
multidict 6.0.5
multivolumefile 0.2.3
munkres 1.1.4
murmurhash 1.0.10
mypy 1.9.0
mypy-extensions 1.0.0
nbclient 0.10.0
nbformat 5.10.4
nest_asyncio 1.6.0
networkx 3.3
nltk 3.8.1
numba 0.59.1
numpy 1.26.4
oauthlib 3.2.2
opencv-python-headless 4.9.0.80
openpyxl 3.1.2
outcome 1.3.0.post0
OWSLib 0.28.1
packaging 23.2
pandas 2.2.1
paramiko 3.4.0
parso 0.8.4
partd 1.4.1
pathspec 0.12.1
patsy 0.5.6
Pebble 5.0.7
pexpect 4.9.0
pickleshare 0.7.5
pillow 10.3.0
pip 24.0
pkgutil_resolve_name 1.3.10
platformdirs 4.2.0
plotly 5.19.0
plotnine 0.13.5
pluggy 1.4.0
polars 0.20.18
preshed 3.0.9
prometheus_client 0.20.0
prometheus-flask-exporter 0.23.0
prompt-toolkit 3.0.42
protobuf 4.25.3
psutil 5.9.8
ptyprocess 0.7.0
pure-eval 0.2.2
py7zr 0.20.8
pyarrow 15.0.0
pyarrow-hotfix 0.6
pyasn1 0.5.1
pyasn1-modules 0.3.0
pybcj 1.0.2
pycodestyle 2.11.1
pycosat 0.6.6
pycparser 2.21
pycryptodomex 3.20.0
pydantic 2.7.1
pydantic_core 2.18.2
pyflakes 3.2.0
Pygments 2.17.2
PyJWT 2.8.0
pylint 3.1.0
PyNaCl 1.5.0
pynsee 0.1.7
pyOpenSSL 24.0.0
pyparsing 3.1.2
pyppmd 1.1.0
pyproj 3.6.1
pyshp 2.3.1
PySocks 1.7.1
python-dateutil 2.9.0
python-dotenv 1.0.1
python-magic 0.4.27
pytz 2024.1
pyu2f 0.1.5
pywaffle 1.1.0
PyYAML 6.0.1
pyzmq 25.1.2
pyzstd 0.15.10
QtPy 2.4.1
querystring-parser 1.2.4
rasterio 1.3.10
referencing 0.34.0
regex 2023.12.25
requests 2.31.0
requests-cache 1.2.0
requests-oauthlib 2.0.0
rpds-py 0.18.0
rsa 4.9
Rtree 1.2.0
ruamel.yaml 0.18.6
ruamel.yaml.clib 0.2.8
s3fs 2023.12.2
s3transfer 0.10.1
scikit-image 0.23.2
scikit-learn 1.4.1.post1
scipy 1.13.0
seaborn 0.13.2
selenium 4.20.0
setuptools 69.2.0
shapely 2.0.3
six 1.16.0
smart-open 6.4.0
smmap 5.0.0
sniffio 1.3.1
snuggs 1.4.7
sortedcontainers 2.4.0
soupsieve 2.5
spacy 3.7.4
spacy-legacy 3.0.12
spacy-loggers 1.0.5
SQLAlchemy 2.0.29
sqlparse 0.4.4
srsly 2.4.8
stack-data 0.6.2
statsmodels 0.14.1
tabulate 0.9.0
tblib 3.0.0
tenacity 8.2.3
texttable 1.7.0
thinc 8.2.3
threadpoolctl 3.4.0
tifffile 2024.4.24
tomli 2.0.1
tomlkit 0.12.4
toolz 0.12.1
topojson 1.8
tornado 6.4
tqdm 4.66.2
traitlets 5.14.2
trio 0.25.0
trio-websocket 0.11.1
truststore 0.8.0
typer 0.9.4
typing_extensions 4.11.0
tzdata 2024.1
Unidecode 1.3.8
url-normalize 1.4.3
urllib3 1.26.18
wasabi 1.1.2
wcwidth 0.2.13
weasel 0.3.4
webcolors 1.13
webdriver-manager 4.0.1
websocket-client 1.7.0
Werkzeug 3.0.2
wheel 0.43.0
widgetsnbextension 4.0.10
wordcloud 1.9.3
wrapt 1.16.0
wsproto 1.2.0
xgboost 2.0.3
xlrd 2.0.1
xyzservices 2024.4.0
yarl 1.9.4
yellowbrick 1.5
zict 3.0.0
zipp 3.17.0
zstandard 0.22.0

View file history

SHA Date Author Description
005d89b 2023-12-20 17:23:04 Lino Galiana Finalise l’affichage des statistiques Git (#478)
e52cc8a 2023-12-19 21:40:01 Lino Galiana Automatic black formatting for python examples (#477)
3437373 2023-12-16 20:11:06 Lino Galiana Améliore l’exercice sur le LASSO (#473)
1f23de2 2023-12-01 17:25:36 Lino Galiana Stockage des images sur S3 (#466)
a06a268 2023-11-23 18:23:28 Antoine Palazzolo 2ème relectures chapitres ML (#457)
69cf52b 2023-11-21 16:12:37 Antoine Palazzolo [On-going] Suggestions chapitres modélisation (#452)
09654c7 2023-11-14 15:16:44 Antoine Palazzolo Suggestions Git & Visualisation (#449)
a771183 2023-10-09 11:27:45 Antoine Palazzolo Relecture TD2 par Antoine (#418)
154f09e 2023-09-26 14:59:11 Antoine Palazzolo Des typos corrigées par Antoine (#411)
8082302 2023-08-25 17:48:36 Lino Galiana Mise à jour des scripts de construction des notebooks (#395)
3bdf3b0 2023-08-25 11:23:02 Lino Galiana Simplification de la structure 🤓 (#393)
f2905a7 2023-08-11 17:24:57 Lino Galiana Introduction de la partie NLP (#388)
5d4874a 2023-08-11 15:09:33 Lino Galiana Pimp les introductions des trois premières parties (#387)
f5f0f9c 2022-11-02 19:19:07 Lino Galiana Relecture début partie modélisation KA (#318)
8e5edba 2022-09-02 11:59:57 Lino Galiana Ajoute un chapitre dask (#264)
12965ba 2022-05-25 15:53:27 Lino Galiana :launch: Bascule vers quarto (#226)
5c10490 2021-12-03 17:44:08 Lino Galiana Relec (antuki?) partie modelisation (#183)
4cdb759 2021-05-12 10:37:23 Lino Galiana :sparkles: :star2: Nouveau thème hugo :snake: :fire: (#105)
7f9f97b 2021-04-30 21:44:04 Lino Galiana 🐳 + 🐍 New workflow (docker 🐳) and new dataset for modelization (2020 🇺🇸 elections) (#99)
671f75a 2020-10-21 15:15:24 Lino Galiana Introduction au Machine Learning (#72)
Back to top

Footnotes

  1. Nous reviendrons de manière épisodique sur ce principe des grands modèles de langage qui sont devenus, en quelques années, centraux dans l’écosystème de la data science mais sont également amenés à devenir des outils grands publics, à la manière de ChatGPT.↩︎

  2. Historiquement, cette approche nécessitait de disposer de données labellisées donc d’être dans un cadre d’apprentissage supervisé.

    Cependant, avec l’utilisation de plus en plus fréquente de données non structurées, sans labels, a émergé une approche intéressante qui ne nécessite plus forcément de labelliser des volumes importants de données en amont : le reinforcement learning with human feedback.

    Cet article d’Andrew Ng revient sur la manière dont cette approche change la donne dans l’entraînement ou le ré-entraînement de modèles.↩︎

  3. Comme nous l’avons dit, cette différenciation est un peu caricaturale, notamment maintenant que les économistes sont plus familiarisés aux concepts d’évaluation de performance prédictive sur des sous-ensembles d’apprentissage et de test (mais l’évolution est lente).

    La recherche en machine learning est quant à elle très dynamique sur la question de l’explicabilité et de l’interprétabilité des modèles de machine learning, notamment autour du concept de valeurs de Shapley.↩︎

  4. Pour faire l’analogie avec le cadre économétrique, les features sont les variables explicatives ou covariates (la matrice \(X\)) et le label est la variable expliquée (\(y\)).↩︎

  5. Nous allons nous focaliser sur le cas binaire, le plus simple. Dans ce type de problèmes, la variable \(y\) a deux modalités : gagnant-perdant, 0-1, oui-non… Néanmoins il existe de nombreux cas d’usage où la variable dispose de plus de modalités, par exemples des scores de satisfaction entre 0 et 5 ou A et D. La mise en oeuvre de modèles est plus complexe mais l’idée générale est souvent de se ramener à un ensemble de modèles dichotomiques pour pouvoir appliquer des métriques simples et stables.↩︎

Citation

BibTeX citation:
@book{galiana2023,
  author = {Galiana, Lino},
  title = {Python Pour La Data Science},
  date = {2023},
  url = {https://pythonds.linogaliana.fr/},
  doi = {10.5281/zenodo.8229676},
  langid = {en}
}
For attribution, please cite this work as:
Galiana, Lino. 2023. Python Pour La Data Science. https://doi.org/10.5281/zenodo.8229676.