Tag Archives: python

The whole is greater than the sum of the parts

Good news: ou paper, A Sequentially Fair Mechanism for Multiple Sensitive Attributes, written with Philipp Ratz and François Hu will be presented in February in Vancouver, at the 38th Annual AAAI Conference on Artificial Intelligence. For a shorter version, there was a review on montrealethics.ai of the paper last week (as mentioned previously).

Also, last week also, the team launched the  equipy python package, with codes used in the paper,

pip install equipy

EquiPy is a Python package implementing sequential fairness on the predicted outputs of Machine Learning models, when dealing with multiple sensitive attributes. This post-processing method progressively achieve fairness accross a set of sensitive features by leveraging multi-marginal Wasserstein barycenters, which extends the standard notion of Strong Demographic Parity to the case with multiple sensitive characteristics. This approach seamlessly extends to approximate fairness, enveloping a framework accommodating the trade-off between performance and unfairness.

(from the left to the right, Agathe, who just joint the PhD program, Suzie, MSc student at ENSAE, with us since May or June, Philipp, PhD student, François, postdoctoral fellow – and Dante, also postdoctoral fellow, in stochastic processes). According to Aristotle (or probably slightly misquoted),

the whole is greater than the sum of the parts

I couldn’t agree more !

Insurance Pricing Game

Would you like to put your data science skills to the test?

Imperial College London, Universite du Quebec à Montreal (UQAM), and actuarial institutes in Singapore, the UK, including the IFoA, and Australia, ASTIN, the Casualty Actuarial Society are co-organising a global data science competition.

Would you like to accurately predict the cost of insurance by putting your data science skills to the test? We are hosting two competitions with separate datasets, a loss prediction competition on Kaggle with synthetic workers’ compensation data, and a pricing competition in a simulated market hosted on AI Crowd with real-world motor insurance contracts. Codes can be either in R or python. The competition is being sponsored by a number of different organisations, with a total of US$12,000 in cash prizes to be won. For more information about how to take part please visit www.pricing-game.com

When “learning Python” becomes “practicing R” (spoiler)

15 years ago, a student of mine told me that I should start learning Python, that it was really a great language. Students started to learn it, but I kept postponing. A few years ago, I started also Python for Kids, which is really nice actually, with my son. That was nice, but not really challenging. A few weeks ago, I also started a crash course in Python, taught by Pierre. The truth is I think I will probably give up. I keep telling myself (1) I can do anything much faster in R (2) Python is not intuitive, especially when you’re used to practice R for almost 20 years… Last week, I also had to link Python and R for our pricing game : Ali wrote some template codes in Python, and I had to translate them in R. And it was difficult…

Anyway, since it was a school break this week, I said to my son that we should try to practice together, with a nice challenge. For those willing to try it, you’d better stop here, because I will spoil it.

Continue reading When “learning Python” becomes “practicing R” (spoiler)

Pricing Game

In November, with Romuald Elie and Jérémie Jakubowicz, we will organize a session during the 100% Actuaires day, in Paris, based on a “pricing game“. We provide two datasets, (motor insurance, third party claims), with 2  years of experience, and 100,000 policies. Each ‘team’ has to submit premium proposal for 36,000 potential insured for the third year (third party, material + bodily injury).

We will work as a ‘price aggergator’ with all the teams, with simple matching rules (the cheapest is chosen, or more complex rules, based on random selection among cheap insurers). The complete description is available on line.

R codes to read the datasets are

> training <- read.csv2(
+ "http://freakonometrics.free.fr/training.csv")
> dim(training)
[1] 100021     20
> pricing <- read.csv2(
+ "http://freakonometrics.free.fr/pricing.csv")
> dim(pricing)
[1] 36311    15

Everyone is invited to play! The more, the merrier….

Génération hackers ?

Je suis régulièrement effaré lorsque j’entends les parents d’ami(e)s de ma fille (la petite dernière) s’extasier que leur enfant arrive à dévérouiller “tout seul !” leur téléphone cellulaire. Le coté auto-célébration de son rejeton, je connais depuis plus d’une dizaine d’années (et je pense en avoir fait aussi ma part), mais c’est plutôt le commentaire “ah vraiment, cette génération sait tellement bien utiliser l’informatique… tu te rends compte, elle a seulement 3 ans !“.

Il serait temps de rétablir une vérité historique: je commence à me faire vieux, mais pourtant, quand j’étais à l’école primaire, on avait des cours d’informatique. Ce n’était pas comme aujourd’hui, où mes enfants ont toujours eu un ordinateur au fond de la salle (dès l’école maternelle, soit à l’age de 2 ans en France), qui servait à faire défiler des photos, ou à aller chercher des informations sur internet. De mon temps, on n’avait pas un ordinateur dans chaque classe, mais il y avait une salle informatique avec des MO5 (qui venaient de sortir). Et par informatique, j’entends par là que l’on apprenait à taper des lignes de code (on n’avait pas internet, oui, j’ai connu ces ages reculés). Ce n’était pas bien méchant: il y avait le logo, mais surtout le Basic (c’était dans le cadre du plan informatique pour tous). De manière surprenante, on était actif devant un écran, en produisant des choses !

Je me souviens avoir fait mes premiers jeux à l’age de mon fils (lui a 10 ans, mais j’étais peut-être un peu plus vieux, maintenant que je découvre les dates exactes en tapant ce billet, je vois que ma mémoire me joue des tours). Souvent, on recopiait des lignes de codes, mais quand même ! Comment se fait-il que l’aspect programmation ait été complètement enlevé des écoles, pour ne parler que d’applications ? et le plus souvent sous une forme ultra rudimentaire, pour ne pas dire mauvaise. Par exemple, je suis régulièrement effaré que mon fils n’ait pas la moindre notion de sécurité informatique (et je ne parle pas de mise en garde avant de créer une page sur Facebook… ce qui serait la moindre des choses) ! Il rentre régulièrement de l’école, m’expliquant que des copains lui ont parlé d’un nouveau site de jeux. Mais il faut s’inscrire, créer un compte, etc. L’autre jour, en discutant un peu avec lui des mots de passe, on a compris qu’il pourrait être amusant de créer un site, où les gens entreraient leur adresse électronique, et un mot de passe. Et que le mot de passe permettrait surement de se connecter sur leur adresse électronique (oui, il s’est rendu compte qu’il utilisait toujours le même mot de passe). Il pourrait alors faire des bonnes blagues en envoyant des messages à leur place ! (il a 10 ans, ses blagues sont encore relativement innocentes). On a eu une longue discussion au début de la semaine de relâche, et je me rends compte qu’il ne manque pas grand chose pour en faire un vrai hacker (j’entends par là le sens que l’on trouve sur wikipedia, “un hacker est quelqu’un qui aime comprendre le fonctionnement d’un mécanisme, afin de pouvoir le bidouiller“; il est dommage que dans l’imaginaire collectif – j’entends par là ce que l’on peut lire dans les journaux – le hacker soit aussi mal perçu, alors que c’est juste quelqu’un de curieux… la curiosité est devenu un bien mauvais défaut).

Après avoir longuement hésité (et parce que je ne trouvais pas de camps de jour qui proposait d’apprendre à faire de l’informatique), je me suis lancé: mon fils va faire du R. Lui est content car il réclame souvent à pouvoir “faire des trucs” sur l’ordinateur, et moi car j’ai l’illusion qu’il va apprendre des choses qui pourraient lui servir un jour (au moins à comprendre comment fonctionne un ordinateur). Et autant que faire se peut, j’essaye de séparer les activités familiales de ce qui pourrait s’approcher du travail. En fait, je pensais acheter python for kids (et en profiter pour découvrir un langage que j’aurais du apprendre voilà 10 ans). Mais le livre est en anglais, et mon fils n’est pas très à l’aise. Bref, je me suis lancé dans R for kids (par moi même)L’objectif était d’apprendre à faire des dessins  (un peu dans l’idée du logo je pense). De comprendre qu’un dessin était une succession de formes de base. J’ai commencé (pendant le cours d’escrime de mon fils) à taper quelques fonctions simples (carré, trait, triangle, disque, point, etc), et à coder les principales couleurs (pour qu’il les tape en français). Tout est caché dans la fonction

source("http://freakonometrics.free.fr/RforKIDZ.R")

Ensuite, on s’est lancé. Le point de départ est de faire un dessin ! Oui, c’est plus simple. Ensuite, on va définir des points, en donnant leur coordonnées à partir de la grille de fond

fond()

pour créer la grille de fond, et pour les points

A=c(0,0)
B=c(4,12)
C=c(0,12)
D=c(2,15)

On peut d’ailleurs visualiser ces points (pour vérifier qu’ils sont bien placés)

point(A)
point(B)
point(C)
point(D)

Puis on fait les figures.

carre(A,B,"gris")
polygone(C,B,D,couleur="rouge")

(dans la première version, je n’avais pas pensé faire une fonction spécifique pour les triangles) Ensuite, on rajoute un drapeau,

E=c(2,18)

pour le sommet du mat, puis pour le reste

trait(D,E,"noir",ep=2)
F=c(2,16)
point(F)
G=c(6,17)
point(G)
polygone(E,F,G,couleur="jaune")

Ce n’est pas du code, ça…. Ben, un peu quand même…. surtout quand on a vu qu’on pouvait translater une figure,

h=15
A=c(0+h,0)
B=c(4+h,12)
C=c(0+h,12)
D=c(2+h,15)
E=c(2+h,18)
carre(A,B,"gris")
polygone(C,B,D,couleur="rouge")
trait(D,E,"noir",ep=2)
F=c(2+h,16)
G=c(6+h,17)
polygone(E,F,G,couleur="jaune")

Et hop, on a deux tours.

Je pense que c’est là le cœur de la programmation: comprendre qu’il y a une forme de base, et qu’après, on ne fait que répéter. Ensuite, au centre, on a fait le mur, et on a mis les créneaux, là encore, en comprenant que c’était la même figure, translatée plusieurs fois…

A=c(4,0)
B=c(15,8)
carre(A,B,"gris")

A=c(5,8)
B=A+1
carre(A,B,"gris")

et puis on répète

A=c(7,8)
B=A+1
carre(A,B,"gris")

A=c(9,8)
B=A+1
carre(A,B,"gris")

etc…

(on a vu au passage que si on ne compte pas utiliser un point, on peut donner son nom à un autre) Enfin, pour faire le mur et la porte, on a vu qu’on avait le choix: Le plus simple (après de longues négociations discussions) a été de faire un rectangle, puis de faire un trou carré, et un cercle (en blancs).

A=c(13,8)
B=A+1
carre(A,B,"gris")

A=c(8,0)
B=c(12,4)
carre(A,B,"blanc")

C=c(10,4)
disque(C,2,"blanc")

Pas mal ? Bon, maintenant, ça me gêne un peu. Parce que je ne suis pas un bon codeur, et je vais apprendre de mauvais réflexes à mon fils (ou mes enfants, car ma fille a fini par participer, mais on verra plus tard ce qu’elle a fait).

Le plus marrant, c’est qu’on a vu comment faire un film: on a construit une voiture (assez sommaire, j’en conviens, les ingénieurs pesteront surement en voyant notre boite à chaussures avec deux roues).

dessin=function(x){
fond()
A=c(2+x,2)
B=c(6+x,4)
C=c(3+x,2)
D=c(5+x,2)
carre(A,B,"vert")
disque(C,.75,"noir")
disque(D,.75,"noir")
}

(c’est moi qui est codé la fonction, on verra ça plus en détails une prochaine fois). Et ensuite, on l’a faite se translater, de la gauche, vers la droite: on commence par taper

dessin(0)

puis

dessin(1)

et

dessin(2)

etc… en allant vite, on crée du mouvement…

Amusant, non ?

Ma fille, elle a opté pour un dessin plus traditionnel… le fameux “maison avec arbre et arc en ciel”,

Voilà ce qu’on a pu faire en quelques heures… Je pense qu’on pourrait faire mieux, et je suis ouvert à toutes suggestions: sur la façon d’apprendre à coder, sur l’interface (on utilise R-studio: on code dans la fenêtre de gauche, on utilise l’icône “run” et le dessin s’affiche à droite), sur d’éventuelles applications amusantes, ou des expériences menées par des instituteurs qui veulent apprendre les bases de l’informatique à leurs élèves. Je trouve énormément de ressources en anglais, comme le livre python for kids dont je parlais au début (ou les sites dédiés aux jeux que l’on code soi-même, en python, comme inventwithpython.com/, qui me font penser à ce que je faisais quand j’étais petit), mais je pourrais citer le scratch. Car si la France semble avoir été pionnière en 1980, je ne vois plus grand chose ces temps-ci, en français… Mais je ne sais peut-être pas bien chercher dans la communauté francophone.