supervised ml in practice: tips & tricks
TRANSCRIPT
Денис Пирштук
Supervised MLin Practice: Tips & Tricks
2 Что такое машинное обучение и Data Science?
3
Обучение с учителем: типы задач
• Бинарная классификация (письмо/спам)
• Классификация (собака, кошка, мышь)
• Регрессия (курс доллара)
• Ранжирование (поисковая выдача)
Задача: Конкурс ОТП Банка 2011Предсказание отклика клиентов банкана маркетинговую кампанию
Главная страница конкурса: http://bit.ly/1DPWwG2
5
Примеры входных данных (признаков)
• Бинарные– наличие в собственности квартиры
– адрес регистрации и адрес фактического пребывания совпадают
– наличие в собственности автомобиля российского производства :-)
• Числовые– возраст клиента
– личный доход (в рублях)
– количество месяцев проживания по месту фактического пребывания
– сумма последнего кредита клиента (в рублях)
• Категориальные– отрасль работы клиента– должность– семейное положение
6
Какую метрику выбрать?
• Чувствительность (sensitivity, recall rate) – доля найденных классификатором «1» из всех «1».
• Точность (precision) – доля истинных «1» из всех предсказанных «1».
• Специфичность (specificity, false positive rate) – доля предсказанных «1» из всех «0».
• F1 = 2 * recall * precision / (precision + recall).
7
ROC AUC (площадь под кривой ошибок)
ROC = Receiver operating characteristic
http://en.wikipedia.org/wiki/Receiver_operating_characteristic
8
Результаты (2011)
Место AUC
1 0.6935
2 0.6895
3 0.6865
4 0.6835
5 0.6780
6 0.6725
7 0.6706
8 0.6580
9 0.6455
10 0.6380
9
Метод опорных векторов (SVM)
10
SVM: преобразование пространства
https://www.dtreg.com/solution/view/20
11
Переобучение SVM
Переобучение: пример
Higgs Boson Machine Learning Challenge
http://www.kaggle.com/c/higgs-boson
13 Переобучение в конкурсе Higgs Boson
14
SVM: качество в конкурсе ОТП БанкаC Train AUC Test AUC
0.05 0.68866 0.65710
0.5 0.74619 0.66544
1.0 0.77207 0.66102
3.0 0.81860 0.64397
7.0 0.85313 0.63001
15
SVM: качество в конкурсе ОТП БанкаC Train AUC Test AUC Количество
опорных вект.
0.05 0.68866 0.65710 13608
0.5 0.74619 0.66544 12262
1.0 0.77207 0.66102 11988
3.0 0.81860 0.64397 11500
7.0 0.85313 0.63001 11013
16
Наивный Байес: качество в конкурсе
from sklearn.naive_bayes import GaussianNBgnb = GaussianNB().fit(X_scaled, y)
from sklearn.naive_bayes import BernoulliNBbnb = BernoulliNB().fit(X_scaled, y)
• GaussianNB– Train AUC: 0.64978– Test AUC: 0.64447
• BernoulliNB– Train AUC: 0.65662– Test AUC: 0.65017
Решающие деревья и бустинг
18
Решающие деревья
from sklearn.tree import DecisionTreeClassifierdtc = DecisionTreeClassifier(max_depth=2)dtc.fit(X, y)print roc_auc_score(y, dtc.predict_proba(X)[:,1])print roc_auc_score(answers, dtc.predict_proba(X_test)[:,1])
–Train AUC: 0.60553–Test AUC: 0.59706
19
Bagging (Bootstrap aggregating)
Classification tree + bagging + random subspace method = RandomForestClassifier
• For max_depth=8 – Train AUC: 0.82832– Test AUC: 0.68455
• For max_depth=None (unlimited)– Train AUC: 1.0– Test AUC: 0.66077
from sklearn.ensemble import RandomForestClassifierrfc = RandomForestClassifier(n_estimators=400, max_depth=8, max_features=17, n_jobs=-1, random_state=1).fit(X, y)
20
Важность признаковПризнак Важность
PERSONAL_INCOME 0.113595
AGE 0.094166
FST_PAYMENT 0.091336
CREDIT 0.082360
WORK_TIME 0.078107
FACT_LIVING_TERM 0.075747
LOAN_NUM_PAYM 0.053088
TERM 0.047470
LOAN_AVG_DLQ_AMT 0.046917
LOAN_MAX_DLQ_AMT 0.043202
sorted(zip(rfc.feature_importances_, real_features, ), reverse=True)
21
AdaBoost
–Train AUC: 0.72852
–Test AUC: 0.68854
from sklearn.ensemble import AdaBoostClassifierada = AdaBoostClassifier(n_estimators=500, learning_rate=0.5).fit(X, y)
22
Стохастический градиентный бустинг
23
XGBoost (eXtreme Gradient Boosting)
• https://github.com/tqchen/xgboost
• Apache License 2.0
• Generalized linear and regression tree boosters
• «Быстрый старт» для задач классификации, регрессии, ранжирования
• Обертки для Python, R, Julia
• Hadoop & MPI-версии (distributed version)– Column-based data splitter – разбиение на узлы по колонкам
– Row-based data splitter – разбиение на узлы по строкам
24
Настройка (eta = 0.02, subsample=1.)
25
Настройка (eta = 0.005, subsample=1.0)
26
Настройка (eta = 0.005, subsample=0.4)
27
Категориальные признаки
• Стратегия 1: заменить категории на доли «1» в ней
• Стратегия 2: заменить категориальные признак из N возможных значений на N бинарных
28
Настройка (eta = 0.005, subsample=0.3)
29
Результат
–Train AUC: 0.7908–Test AUC: 0.7031
import xgbparams = {'max_depth': 5, 'eta': 0.005, 'subsample': .3, 'silent': 0, 'objective': 'binary:logistic', 'min_child_weight': 1, 'seed': 1234, 'eval_metric': 'auc'}
dtrain = xgb.DMatrix(X, y, missing=-9999.)bst = xgb.train(params, dtrain, num_boost_round=1300)
30
Data Science != Аналитика
Традиция:
Human readable output
https://hbr.org/2014/08/the-question-to-ask-before-hiring-a-data-scientist/
Data Science:
Machine readable output