Maraton Analizy Danych, czyli niedzielna notatka z pamiętnika nauczyciela akademickiego


Miałem dzisiaj przyjemność uczestniczyć w pracach jury podczas Maratonu Analizy Danych, wydarzenia zorganizowanego przez koło SNK Data Science Management z SGH. Hakaton trwał 24h, a po maratonie były jeszcze 3h prezentacji. W maratonie wzięły udział zespoły głównie z UW, PW i SGH, choć byli też uczestnicy z innych uczelni, również spoza Warszawy.

Przestrzeń na hakaton bardzo przyjemna (Mysia 3), organizacja świetna (ale czy czegoś innego można się spodziewać po kole z SGH?). To był jeden z bardzo nielicznych hakatonów, w którym duży nacisk położono na faktyczną analizę danych.

Takie imprezy robią na mnie duże wrażenie. Młodzi ludzie, przez cały dzień i całą noc walczą z jakimś problemem, a później jeszcze mają siłę pokazać wyniki innym zespołom.
Ach te studenckie czasy!
Wśród rozwiązań dominował R i Python, sporo było map (oczywiście leaflet), były aplikacje Shiny, a nawet w prezentacjach pojawił się jakiś PowerBI. Od strony metodologicznej dało się wyczuć dwa rodzaje podejść, nazwijmy je umownie podejściem maszynowym (jak model to random forest albo xgboost) i statystycznym (aż po statystykę Morana dla danych przestrzennych). To już same w sobie było świetne, uczestnicy zostali wystawieni na nowe (dla części z nich) algorytmy i podejścia do analizy danych.

Lubię takie wydarzenia, ponieważ pokazują jakie kompetencje posiadają najaktywniejsi studenci (ech, to spaczone spojrzenie nauczyciela akademickiego).
Od strony narzędziowej zespoły prezentowały bardzo wysoki poziom (a to studenci I i II stopnia), niesamowite co udało się zrobić w 24h. Od strony prezentacyjnej poziom też był wysoki. Czytelne sensowne przedstawianie problemu i rozwiązania. Były zespoły, które zdążyły zrobić i analizę i aplikację webową i bardzo graficznie dopracowaną prezentację. Znacznie wyższy poziom niż +-10 lat temu gdy prezentacje projektów bywały drętwe.

Ponieważ jestem człowiekiem, dla którego do szklanki zawsze można jeszcze trochę dolać, więc i tutaj zastanawiałem się jakie kompetencje dotyczące analizy danych można by dalej rozwinąć.

I wyszło mi, że wąskim gardłem było najczęściej samo określenie problemu do rozwiązania. Często (a pisząc często rozszerzam to i na inne znane mi hakatony i na znane mi projekty uczelniane) analiza danych jest ,,data-driven” a nie ,,problem-driven”.
Wychodzi się od dostępnego zbioru danych i zastanawia jaki by tu problem z tych danych rozwiązać. W konsekwencji gdy już wydaje się, że ten problem się rozwiązało, okazuje się, że te dane niespecjalnie się do tego problemu nadawały. Czy to z powodu agregacji, czy zakresów czy czegoś innego.
Pozostawia to pewien niedosyt. Widać było ciekawy problem, widać było wysiłek i umiejętności, ale rozwiązanie nie jest w pełni satysfakcjonujące z uwagi na ,,zniewolenie myślenia przez te konkretne dane”. Rozwiązanie nie jest wymuskane, lśniące, pachnące itp.
Potraktowałbym to jako wskazówkę dla prowadzących przedmioty projektowe na uczeniach, by większy nacisk włożyć na krytyczną ocenę potencjału wykorzystania określonego źródła danych.

Tak czy inaczej Maraton Analizy Danych był fantastycznym wydarzeniem pełnym pozytywnej energii. To była pierwsza edycja, oby były kolejne.
Najbliższy hakaton związany z analizą danych odbędzie się za dwa tygodnie, podczas konferencji Data Science Summit (nasza fundacja jest partnerem!).
Z pewnością też tam będę 😉

ML models: What they can’t learn?

What I love in conferences are the people, that come after your talk and say: It would be cool to add XYZ to your package/method/theorem.

After the eRum (great conference by the way) I was lucky to hear from Tal Galili: It would be cool to use DALEX for teaching, to show how different ML models are learning relations.

Cool idea. So let’s see what can and what cannot be learned by the most popular ML models. Here we will compare random forest against linear models against SVMs.
Find the full example here. We simulate variables from uniform U[0,1] distribution and calculate y from following equation

In all figures below we compare PDP model responses against the true relation between variable x and the target variable y (pink color). All these plots are created with DALEX package.

For x1 we can check how different models deal with a quadratic relation. The linear model fails without prior feature engineering, random forest is guessing the shape but the best fit if found by SVMs.

With sinus-like oscillations the story is different. SVMs are not that flexible while random forest is much closer.

Turns out that monotonic relations are not easy for these models. The random forest is close but event here we cannot guarantee the monotonicity.

The linear model is the best one when it comes to truly linear relation. But other models are not that far.

The abs(x) is not an easy case for neither model.

Find the R codes here.

Of course the behavior of all these models depend on number of observation, noise to signal ratio, correlation among variables and interactions.
Yet is may be educational to use PDP curves to see how different models are learning relations. What they can grasp easily and what they cannot.

DALEX @ eRum 2018

DALEX invasion has started with the workshop and talk @ eRum 2018.

Find workshop materials at DALEX: Descriptive mAchine Learning EXplanations. Tools for exploration, validation and explanation of complex machine learning models (thanks Mateusz Staniak for having the second part of the workshop).

And my presentation Show my your model 2.0! (thanks go to the whole MI2DataLab for contributions and Malgorzata Pawlak for great stickers).

ML nad Wisłą

28 maja odbędzie się pierwsze Warszawsko-Krakowskie Spotkanie Naukowe dotyczące uczenia maszynowego. Wspólne seminarium grup GUM (UJ) i MI2 (UW + PW) zajmujących się Machine Learningiem. Lista pięciu planowanych referatów jest tutaj (strona będzie uzupełniana). To pierwsze spotkanie, planowane są kolejne, na zmianę w Krakowie i Warszawie. Wstęp wolny. Będzie czas na poznanie się. Zapraszamy osoby zainteresowane poważniejszymi badaniami w obszarze ML.

W marcu odbyła się Gala Konkursu Data Science Masters na najlepszą pracę magisterską z obszaru Machine Learning i Data Science. Otrzymaliśmy w konkursie 72 prace z 17 uczelni! Zwycięzcy pierwszej edycji to: Tomasz Wąs (UW), Mateusz Susik (UW), Aleksander Nosarzewski (SGH). Wyróżnienia otrzymali: Dymitr Pietrow (WUT), Agnieszka Sitko (UW), Urszula Mołdysz (PŚ). Więcej informacji o nagrodzonych pracach na tej stronie (trochę trwało jej uzupełnienie). Dziękujemy Nethone (grupa DaftCode) za ufundowanie nagród.

Z okazji 100-lecia GUS w lipcu odbędzie się II Kongres Statystyki Polskiej. Więcej informacji na tej stronie. Jeszcze przez kilka dni można zgłaszać propozycje referatów. Jest kilka bardzo ciekawych sesji, np. poświęcona statystyce polskiej, analizie danych czy danym statystycznym.

Grupa europejskich badaczy ML apeluje do UE o utworzenie ELLIS: European Lab for Learning & Intelligent Systems, badawczego instytutu uczenia maszynowego na styku akademii i biznesu. Także w naszym kraju trwają prace nad powołaniem instytutu badawczego zajmującego się analizą danych. Robocza nazwa NISAD. Osoby zainteresowane tą inicjatywą zapraszam na priv.

Ministerstwo nauki ogłosiło konkurs na drugą edycję Doktoratów Wdrożeniowych. To może być ciekawa propozycja dla świeżych absolwentów pracujących w działach badawczych firm zainteresowanych zaawansowanym ML. Do tego programu można zgłaszać się jeszcze przez miesiąc.

DALEX Stories – Warsaw apartments

This Monday we had a machine learning oriented meeting of Warsaw R Users. Prof Bernd Bischl from LMU gave an excellent overview of mlr package (machine learning in R), then I introduced DALEX (Descriptive mAchine Learning EXplanations) and Mateusz Staniak introduced live and breakDown packages.

The meeting pushed me to write down a gentle introduction to the DALEX package. You may find it here https://pbiecek.github.io/DALEX_docs/.
The introduction is written around a story based on Warsaw apartments data.

The story goes like that:
We have two models fitted to apartments data: a linear model and a randomForest model. It happens that both models have exactly identical root mean square for errors calculated on a validation dataset.
So an interesting question arise: which model we should choose?

The analysis of variable importance for both models reveals that variable construction.year is important for randomForest but is completely neglected by linear model.
New observation: something is going on with construction.year.

The analysis of model responses reveals that the relation between construction.year and price of square meter is nonlinear.
At this point it looks like the random forest model is the better one, since it captures relation, which the linear model do not see.

But (there is always but) when you audit residuals from the random forest model it turns out that it heavily under predicts prices of expensive apartments.
This is a very bad property for a pricing model. This may result in missed opportunities for larger profits.
New observation: do not use this rf model for predictions.

So, what to do?
DALEX shows that despite equal root mean squares of both models they are very different and capture different parts of the signal.
As we increase our understanding of the signal we are able to design a better model. And here we go.
This new liner model has much lower root mean square of residuals, as it is build on strengthens of both initial models.

All plots were created with DALEX explainers. Find R code and more details here.

DALEX: which variables are really important? Ask your black box model!

Third post from the short series about black-box explainers implemented in the DALEX package. Learn more about DALEX at SER (Warsaw, April 2018), eRum (Budapest, May 2018), WhyR (Wroclaw, June 2018) or UseR (Brisbane, July 2018).

Two weeks ago I wrote about single variable conditional responses and last week I wrote about decompositions of a single prediction.

Sometimes we would like to know the general structure of a model, or at least know which variables are the most influential. There is a lot of different approaches to this problem proposed in literature. A nice, simple, and model agnostic approach is described in this article (Fisher, Rudin, and Dominici 2018). To see how important is variable X let’s permute it’s values and measure the drop in model accuracy.
This procedure is implemented in the DALEX package in the variable_dropout() function. There are some tweaks (for large datasets you do not need to permute all rows while for small datasets you could consider some oversampling) but the idea is the same.

In the figure below you will find variable importances for three models created with the HR dataset. It is easy to spot that the randomForest model results in the best model and satisfaction_level is the most important variable in all three models.

plot.variable_dropout_explainer-19

There are two things that I like in this explainer.

1) Variable effects for a single model are interesting, but ability to compare effects for many modes is even more interesting. In the DALEX you can simply contrast/compare explainers across different models.

2) There is no reason to start variable importance plots in the point 0, since the initial model performance is different for different plots. It is much more informative to present both the initial model performance and drop in the performance resulting from the dropout of a variable.

If you want to learn more about DALEX package and variable importances consult following vignette or the DALEX website.

DALEX_variable_dropout

Rozstrzygnięcie konkursu Data Science Masters na najlepszą pracę z DS i ML

Screen Shot 2018-03-14 at 9.20.11 AM
Dzisiaj dzień liczby Pi. Dobry dzień na rozstrzygnięcie PIerwszej edycji konkursu Data Science Masters na najlepsza pracę magisterską.

Ze zgłoszonych 72 prac trzeba było wybrać 3, które otrzymają nagrodę. Tematyka tych prac była bardzo różna (chmura słów po prawej została wygenerowana z tytułów i abstraktów). Prace zgłaszane były z całej Polski (statystyki dotyczące uczelni są poniżej). Na gali będzie można zapoznać się z procedurą konkursową oraz z nagrodzonymi pracami. Autorzy nagrodzonych prac zostali poproszeni o kilkunasto-minutowe prezentacje.

W imieniu komisji oraz organizatorów (MiNI PW i Nethone) serdecznie zapraszam dzisiaj do sali 107 na godzinę 16:15. Po gali, przy poczęstunku, będzie można porozmawiać z nagrodzonymi. Więcej informacji tutaj.

How fractals helped my students to master package development in R

Last semester I taught an R programming at MIMUW. My lectures are project oriented, the second project was related to package development. The idea was straightforward: each team of students shall create a package that produces IFS fractals (based on iterated function systems). Each package shall have two generic functions: create() and plot(), documentation and vignette. Fractals shall be implemented with the use of S3 or S4 classes.

I have students with different backgrounds. Mostly statistics, but some are from physics, psychology or biology. I was a bit unsure how they will deal with concepts like iterated contractions.
After all results exceeded my expectations.

Guess what is happening with students engagement when their packages start producing nice plots. Their need/hunger for more leads to beautiful things.

This team got interested in nonlinear transformations. They manage to create Apollonian Gasket generator and much more. See their vignette and package here.

Screen Shot 2018-03-09 at 7.31.24 PM

This team got interested in probabilistic mixtures of two fractals. They developed a Shiny app that mixes two sets of contractions with given mixture proportions. Here is a mixture of Sierpinski gasket and a tree. Find out their vignette here.

Screen Shot 2018-03-09 at 7.29.58 PM

This team got interested in random fractals. They developed fractal generator that draws parameters of each contraction. In result they get beautiful random shapes like these. Here is their vignette.

Screen Shot 2018-03-09 at 7.37.42 PMScreen Shot 2018-03-09 at 7.37.31 PMScreen Shot 2018-03-09 at 7.37.26 PM

And these two teams got interested in different ways of fractal colouring. Vignettes of Team 1 and Team 2

Screen Shot 2018-03-09 at 7.40.15 PMScreen Shot 2018-03-09 at 7.36.01 PMScreen Shot 2018-03-09 at 7.31.05 PM

After all it turns out that fractals are very addictive!
Use it with care 😉

BetaBit: Tato, kiedy ty mi to wreszcie wytłumaczysz….

Konigsberg_riverCzasem, gdy rozmawiam o edukacji matematycznej dla dzieci, temat schodzi na zagadnienia typu: w jakie słodkie opakowanie ubrać tę gorzką pigułkę wiedzy, aby dziecko chciało ją połknąć. Że to niby tyle różnych cukierków dookoła, tu gra, tam facebook, trzeba z takimi gigantami rywalizować o uwagę dziecka.

Ale czy tak faktycznie jest? Mój syn mnie kiedyś zabił pytaniem ,,Tato, kiedy ty mi wreszcie wytłumaczysz co to jest DNA”? Zacząłem się zastanawiać, jak wyglądałaby interakcja pomiędzy uczniem a nauczycielem, gdyby uczeń robił co tylko może by wyciągnąć od nauczyciela wiedzę, a nauczyciel co tylko może by żadnej wiedzy nie przekazać. Do jakich pytań posunąłby się uczeń aby wyrwać nauczycielowi skrawki tajemnicy?

Skracając te przemyślenia i przechodząc do pointy.
Napisałem krótkie opowiadanko o takim chłopcu co bardzo chciał wiedzieć jak rozwiązać zagadkę z mostami w Królewcu.
Znajdziecie je tutaj.

DALEX: how would you explain this prediction?

Last week I wrote about single variable explainers implemented in the DALEX package. They are useful to plot relation between a model output and a single variable.

But sometimes we are more focused on a single model prediction. If our model predicts possible drug response for a patient, we really need to know which factors drive the model prediction for a particular patient. For linear models it is relatively easy as the structure of the model is additive. In 2017 we have developed breakDown package for lm/glm models.

But how to explain/decompose/approximate predictions for any black box model?
There are several approaches. The (probably) most known is LIME with great examples for image and text data. There is an R port lime developed by Thomas Pedersen. In collaboration with Mateusz Staniak we developed live package, similar approach, easy to use with models created by mlr package.
The other technique that can be used here are Shapley values which use attribution theory/game theory to attribute effects of different variables for a single prediction.

Recently we have developed a yet another approach (paper under preparation, implemented in the breakDown version 0.4) that works in a model agnostic way (here you can check how to use it for caret models). You can play with it via the single_prediction() function in the DALEX package.
Such decomposition is useful for many reasons mentioned in papers listed above (deeper understanding, validation, trust, etc).
And, what is really extra about the DALEX package, you can compare contributions of different models on the same scale.

Let’s train three models (glm / gradient boosting model and random forest model) to predict quality of wine. These models are very different in structure. In the figure below, for a single wine, we compare predictions calculated by these models. For this single wine, for all models the most influential variable is the alcohol concentration as the wine has much higher concentration than average. Then pH and sulphates take second and third positions in all three models. Looks like models have some agreement even if they structure is very different.

plot.single_prediction_explainer-19

If you want to learn more about DALEX package and decompositions for model predictions please consult following cheatsheet or the DALEX website.

If you want to learn more about explainers in general, join our DALEX Invasion!
Find our DALEX workshops at SER (Warsaw, April 2018), ERUM (Budapest, May 2018), WhyR (Wroclaw, June 2018) or UseR (Brisbane, July 2018).

DALEX_single_prediction