Le but de ce document est de formaliser un mode de travail permettant le développement et la mise en production rapide de nouveaux modèles pour le projet Signaux Faibles.
Nous utilisons une version simplifiée du Git Flow:
mainmain est la branche qui contient la seule et unique version du modèle signaux-faibles de production. En théorie, le modèle/code présent sur cette branche devrait pouvoir être utilisé pas n'importe qui (développeur, DevOps, data scientist) sans avoir à se concerter avec le data scientist responsable du modèle. Cette branche a donc vocation à être :main. Cette branche contient du code fonctionnel et qui ne cassera pas la production.MODELE.AMELIORATION.BUGFIX.changelog afin d'expliciter les changements apportés aux différentes versions du modèle.main. Le seul moyen de la faire évoluer est de merger une pull request ayant été revue et validée par un.e pair.e — idéalement depuis dev (voir ci-dessous).devdev est la branche sur laquelle les data scientists travaillent ensemble. Elle est moins stable que main et contient la prochaine release du modèle (dont elle peut être considerée comme une version "beta"). Une fois qu'assez de changements ont été apportés à dev, elle est mergée dans main (et taggée!). Cette branche doit être:dev — le seul moyen de la faire évoluer et de merger une pull request ayant été revue et validée par un.e pair.e — idéalement depuis les feature branches (voir ci-dessous).dev et non pas mainfeaturefeat/<nom_de_la_feature> sont les branches de travail pour les data scientists. Elle peuvent contenir des améliorations/évolutions du modèle, du code, des tests, etc. Elle doivent être:feat/better_hyperparam_tuning se concentrera sur une amélioration du modèle existant alors que feat/new_test_train_split concernera une évolution des fonctions d'aides du repo. Il faut impérativement séparer ces deux chantiers sur deux branches différentes (quitte à travailler sur les 2 en parallèle) afin de pouvoir merger une branche indépendamment de l'autre.dev afin de bénéficier de certains changements déjà réalisés par d'autresdev sur le moyen terme. Cette rêgle peut être adaptée dans le cadre de travaux exploratoires sur des modèles de data science — auquel cas il serait bon de convenir d'une convention de nommage pour ces branches (par exemple, modele/<model_name>).hotfixhotfix/<nom_du_fix> est une branche dite de "hotfix". Elle peut être mergée directement en production (main) dans le cas ou cette dernière est cassée.Ce schéma résume notre git flow (NB: l'utilisation du terme main est aujourd'hui préféré à celui, plus connoté, de main):

(Les branches de hotfix partent et poussent dans main).
Le respect de certaines conventions de nommage permet de s'assurer de la bonne santée du projet.
Pour une nouvelle feature
feat/<name_of_feature>
Pour un nouveau modèle
model/<name_of_model>
Pour une correction de bug en production
hotfix/<description>
Dans l'esprit, se référer à : conventionalcommits
Un commit doit idéalement respecter ce format:
git commit -m '{TYPE}: MESSAGE'
{TYPE}: decrit le type de commit;fix bug fixfeat rajout d'une featurerefactor une amélioration (refacto, factorisation, simplification, etc.)clean nettoyage du codedoc ajout de documentationconfig changement de la configuration du projettest rajout ou mise-à-jour des testsM pour les changements majeurs (commit initial, nouveau modèle, résolution d'un gros bug)Il est possible de rajouter un BODY et un FOOTER à ses messages de commit
git commit -m '{TYPE}: {MESSAGE}' -m '{BODY}' -m '{FOOTER}'
Qui peuvent servir a rajouter des information utiles à l'automatisation de taches par GitHub (par exemple, fermer des issues):
git commit -m 'feat: change test train proportion' \
-m 'move value from .5 to .75' \
-m 'closes #17 and #19'
Certains outils permettent de s'assurer de la pérénité et de la stabilité du code produit.
L'outil standard pour tester en R est le package testthat.
L'intérêt d'utiliser un outil de formattage automatique de code est qu'il permet d'assurer une cohérence au sein du repo en termes de style et de règles. Cela permet une meilleure compréhension du code, moins d'erreurs, et des revues de code plus rapides.
styler semble être un bon outilUn linter s'assure que le code produit adhère aux bonnes pratiques de style et de syntaxe.
lintr est top et s'intègre bien avec styleropensignauxfaibles, il tournera dans la CI.roxygen2Les git hooks permettent de s'assurer que certains scripts tournent automatiquement avant un commit ou un push. Ils sont stockés dans .git/hooks/
.git/hooks/pre-commitstyler tous les fichierslintr tous les fichiers.git/hooks/pre-pushtest et build le package RL'évaluation du modèle peut produire un artefact "model_evaluation.json", versionné dans git avec chaque nouvelle version du modèle.
rsignauxfaibles ne doit jamais contenir l'URI MongoDbAdd the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.