Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Supervised ML in Practice: Tips & Tricks

784 views

Published on

Ключевые идеи алгоритмов обучения по прецедентам и почему про них следует помнить при выборе алгоритма и его настройке, поиске оптимальных параметров. Какие подходы позволяют повысить качество модели, какие программные средства удобно использовать при проведении экспериментов и где спрятаны любимые “грабли”.

Published in: Science
  • Ох, сколько наворочено. И лес, и бустинг, разве что нейронную сеть не взяли, а ведь при грамотном feature engineering старая добрая логрегрессия дает AUC 0.709
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Supervised ML in Practice: Tips & Tricks

  1. 1. Денис Пирштук Supervised ML in Practice: Tips & Tricks
  2. 2. 2 Что такое машинное обучение и Data Science?
  3. 3. 3 Обучение с учителем: типы задач • Бинарная классификация (письмо/спам) • Классификация (собака, кошка, мышь) • Регрессия (курс доллара) • Ранжирование (поисковая выдача)
  4. 4. Задача: Конкурс ОТП Банка 2011 Предсказание отклика клиентов банка на маркетинговую кампанию Главная страница конкурса: http://bit.ly/1DPWwG2
  5. 5. 5 Примеры входных данных (признаков) • Бинарные – наличие в собственности квартиры – адрес регистрации и адрес фактического пребывания совпадают – наличие в собственности автомобиля российского производства :-) • Числовые – возраст клиента – личный доход (в рублях) – количество месяцев проживания по месту фактического пребывания – сумма последнего кредита клиента (в рублях) • Категориальные – отрасль работы клиента – должность – семейное положение
  6. 6. 6 Какую метрику выбрать? • Чувствительность (sensitivity, recall rate) – доля найденных классификатором «1» из всех «1». • Точность (precision) – доля истинных «1» из всех предсказанных «1». • Специфичность (specificity, false positive rate) – доля предсказанных «1» из всех «0». • F1 = 2 * recall * precision / (precision + recall).
  7. 7. 7 ROC AUC (площадь под кривой ошибок) ROC = Receiver operating characteristic http://en.wikipedia.org/wiki/Receiver_operating_characteristic
  8. 8. 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. 9. 9 Метод опорных векторов (SVM)
  10. 10. 10 SVM: преобразование пространства https://www.dtreg.com/solution/view/20
  11. 11. 11 Переобучение SVM
  12. 12. Переобучение: пример Higgs Boson Machine Learning Challenge http://www.kaggle.com/c/higgs-boson
  13. 13. 13 Переобучение в конкурсе Higgs Boson
  14. 14. 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. 15. 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. 16. 16 Наивный Байес: качество в конкурсе from sklearn.naive_bayes import GaussianNB gnb = GaussianNB().fit(X_scaled, y) from sklearn.naive_bayes import BernoulliNB bnb = BernoulliNB().fit(X_scaled, y) • GaussianNB – Train AUC: 0.64978 – Test AUC: 0.64447 • BernoulliNB – Train AUC: 0.65662 – Test AUC: 0.65017
  17. 17. Решающие деревья и бустинг
  18. 18. 18 Решающие деревья from sklearn.tree import DecisionTreeClassifier dtc = 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. 19. 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 RandomForestClassifier rfc = RandomForestClassifier(n_estimators=400, max_depth=8, max_features=17, n_jobs=-1, random_state=1).fit(X, y)
  20. 20. 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. 21. 21 AdaBoost –Train AUC: 0.72852 –Test AUC: 0.68854 from sklearn.ensemble import AdaBoostClassifier ada = AdaBoostClassifier(n_estimators=500, learning_rate=0.5).fit(X, y)
  22. 22. 22 Стохастический градиентный бустинг
  23. 23. 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. 24. 24 Настройка (eta = 0.02, subsample=1.)
  25. 25. 25 Настройка (eta = 0.005, subsample=1.0)
  26. 26. 26 Настройка (eta = 0.005, subsample=0.4)
  27. 27. 27 Категориальные признаки • Стратегия 1: заменить категории на доли «1» в ней • Стратегия 2: заменить категориальные признак из N возможных значений на N бинарных
  28. 28. 28 Настройка (eta = 0.005, subsample=0.3)
  29. 29. 29 Результат –Train AUC: 0.7908 –Test AUC: 0.7031 import xgb params = {'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. 30. 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
  31. 31. Денис Пирштук dzianis.pirshtuk@yandex.by Спасибо

×