{"id":326793,"date":"2022-01-10T07:26:30","date_gmt":"2022-01-10T07:26:30","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=326793"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=326793","title":{"rendered":"<span>\u0413\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u0439 \u0431\u0443\u0441\u0442\u0438\u043d\u0433 \u0441 CatBoost (\u0447\u0430\u0441\u0442\u044c 2\/3)<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\" class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"627\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b64\/8b7\/88b\/b648b788b61c0bc2d525a33a40127b88.png\" data-width=\"1200\"\/><figcaption><\/figcaption><\/figure>\n<p><a href=\"https:\/\/habr.com\/ru\/post\/594077\/\" rel=\"noopener noreferrer nofollow\">\u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043f\u0440\u043e \u043f\u043e\u043d\u044f\u0442\u0438\u0435 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u0431\u0443\u0441\u0442\u0438\u043d\u0433\u0430, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438 \u0443\u0433\u043b\u0443\u0431\u0438\u043b\u0438\u0441\u044c \u0432 \u043e\u0434\u043d\u0443 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u043e CatBoost \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c Cross Validation, Overfitting Detector, ROC-AUC, SnapShot \u0438 Predict. \u041f\u043e\u0435\u0445\u0430\u043b\u0438!<\/p>\n<p>\u0414\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043c\u044b \u043c\u0435\u0440\u0438\u043b\u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c fold\u2019e (\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0435), \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u0437\u044f\u043b\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043b\u0438 \u043d\u0430\u0448\u0443 \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u043d\u0430 \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0443\u044e \u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e, \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u0432\u0434\u0440\u0443\u0433 \u043c\u044b \u0432\u0437\u044f\u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043d\u0435\u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u043a \u043d\u0430\u0448\u0435\u0433\u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430, \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0430\u043c\u043e\u043c \u043a\u0443\u0441\u043a\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e, \u0430 \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0442\u043e \u0441 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u0440\u0430\u0439\u043d\u0435 \u0433\u0440\u0443\u0441\u0442\u043d\u043e. \u0414\u0430\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Cross Validation.<\/p>\n<p>\u0420\u0430\u0437\u043e\u0431\u044c\u0451\u043c \u043d\u0430\u0448 \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u043d\u0430 \u043a\u0443\u0441\u043e\u0447\u043a\u0438 \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0443\u0447\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043a\u0443\u0441\u043e\u0447\u043a\u043e\u0432. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u0443\u0447\u0430\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u0432\u0441\u0435 \u043a\u0443\u0441\u043a\u0430\u0445 \u043a\u0440\u043e\u043c\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e, \u043d\u0430\u043c \u043d\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f, \u043f\u043e\u0442\u043e\u043c \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0438 \u0432\u0441\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043a\u0443\u0441\u043e\u0447\u043a\u0430 \u043d\u0430\u0448\u0435\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438:<\/p>\n<pre><code>from catboost import cv  params = {     'loss_function': 'Logloss',     'iterations': 150,     'custom_loss': 'AUC',     'random_seed': 63,     'learning_rate': 0.5 }  cv_data = cv(     params=params,     pool=Pool(X, label=y, cat_features=cat_features),     fold_count=5, # \u0420\u0430\u0437\u0431\u0438\u0432\u043a\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043d\u0430 5 \u043a\u0443\u0441\u043e\u0447\u043a\u043e\u0432     shuffle=True, # \u041f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u0435\u043c \u043d\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435     partition_random_seed=0,     plot=True, # \u041d\u0438\u043a\u0443\u0434\u0430 \u0431\u0435\u0437 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430     stratified=True,      verbose=False )<\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"513\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/26f\/42b\/571\/26f42b57130e27e44efd35f2a3034699.png\" data-width=\"1024\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u043d\u043e\u0432\u044c \u0432\u0438\u0434\u0438\u043c \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u043e\u0434\u0430, \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d \u0440\u0438\u0441\u0443\u0435\u0442 \u043d\u0435 \u043e\u0434\u043d\u0443 \u043a\u0440\u0438\u0432\u0443\u044e, \u0430 \u0441\u0440\u0435\u0434\u043d\u044e\u044e \u043a\u0440\u0438\u0432\u0443\u044e \u043f\u043e \u0432\u0441\u0435\u043c fold\u2019a\u043c, \u043d\u043e \u0435\u0441\u043b\u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u0433\u0430\u043b\u043e\u0447\u043a\u0443 \u0441 Standard Deviation, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u043a\u0440\u0438\u0432\u0443\u044e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c fold\u2019\u044b, \u0433\u0434\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043b\u043e\u0445\u043e\u0435 \u0438\u043b\u0438 \u0445\u043e\u0440\u043e\u0448\u0435\u0435.<\/p>\n<p>\u0427\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f Cross Validation? \u0415\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d pandas\/polars (\u043e\u0431 \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f), \u0442\u043e DataFrame, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e Python \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043b\u0435\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u0440\u043e \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"238\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/833\/b4a\/e08\/833b4ae083d1765c3b52afe3d65357e2.png\" data-width=\"1024\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u043d\u0430 \u0432\u0441\u0435\u0445 fold\u2019\u0430\u0445.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u044b\u0432\u0435\u0434\u0435\u043c Logloss \u0438 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u0448\u0430\u0433\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043b\u0443\u0447\u0448\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code>best_value = np.min(cv_data['test-Logloss-mean']) best_iter = np.argmin(cv_data['test-Logloss-mean']) print(\"Best validation Logloss score, stratified: {:.4f}+\/-{:.3f} on step {}\".format( best_value, cv_data['test-Logloss-std'][best_iter], best_iter))  Best validation Logloss score, stratified: 0.1577+\/-0.002 on step 52<\/code><\/pre>\n<p>\u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0438\u0439 Logloss \u0440\u0430\u0432\u0435\u043d 0.1577 \u0438 \u043e\u043d \u0431\u044b\u043b \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043d\u0430 52 \u0448\u0430\u0433\u0435 \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435\u043c 0.002.<\/p>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u043b Overfitting Detector, \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435? \u042d\u0442\u043e \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u0448\u0438\u043a\u0430\u0440\u043d\u0430\u044f \u0432\u0435\u0449\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f Data Scientist\u2019a. \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043e\u0431\u0443\u0447\u0430\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044c, \u0432\u0441\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u0442\u0430\u043a \u0437\u0430\u0447\u0435\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0438 \u0436\u0434\u0430\u0442\u044c \u043f\u043e\u043a\u0430 \u043f\u0440\u043e\u0439\u0434\u0443\u0442 \u0432\u0441\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f? \u0412 \u044d\u0442\u043e\u043c \u043a\u0430\u043a \u0440\u0430\u0437 \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0439 \u0432\u044b\u0448\u0435 Overfitting Detector.<\/p>\n<p>\u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 early_stopping_rounds, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0432\u0435\u043d 20, \u0435\u0441\u043b\u0438 \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 20 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043e\u0448\u0438\u0431\u043a\u0430 \u043d\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442\u0441\u044f, \u0442\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e:<\/p>\n<pre><code>model_with_early_stop = CatBoostClassifier(     iterations=200,     random_seed=63,     learning_rate=0.5,     early_stopping_rounds=20 )  model_with_early_stop.fit(     X_train, y_train,     cat_features=cat_features,     eval_set=(X_test, y_test),     verbose=False,     plot=True )<\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"518\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2d4\/455\/90f\/2d445590fb1846ae01dc17a6b741804c.png\" data-width=\"1024\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0417\u0434\u0435\u0441\u044c \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0435\u0440\u0435\u043e\u0431\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u043d\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 28, \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0435\u0449\u0435 20 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0443\u0445\u0443\u0434\u0448\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 48 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438. \u0412\u044b\u0437\u043e\u0432\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e tree_count \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f:  <\/p>\n<pre><code>print(model_with_early_stop.tree_count_)  28<\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 Logloss, \u0430 \u043d\u0430 \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u0443\u044e \u043c\u0435\u0442\u0440\u0438\u043a\u0443, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 AUC, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c AUC \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c eval_metric. \u041e\u0442\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c AUC \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c:  <\/p>\n<pre><code>model_with_early_stop=CatBoostClassifier(     eval_metric='AUC',     iterations=200,     random_seed=63,     learning_rate=0.3,     early_stopping_rounds=20) model_with_early_stop.fit(     X_train,y_train,     cat_features=cat_features,     eval_set=(X_test, y_test),     verbose=False,     plot=True )<\/code><\/pre>\n<p>\u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043d\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 44, \u043f\u0440\u043e\u0448\u043b\u043e \u0435\u0449\u0435 20 \u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e:  <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"519\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8f2\/d14\/425\/8f2d1442507e2a7f381e00775504009a.png\" data-width=\"1024\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412\u044b\u0437\u043e\u0432\u0435\u043c tree_count_ \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432 \u043e\u0442\u0432\u0435\u0442\u0435:  <\/p>\n<pre><code>print(model_with_early_stop.tree_count_)  44<\/code><\/pre>\n<p>\u0415\u0434\u0435\u043c \u0434\u0430\u043b\u0435\u0435\u2026 \u041f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u0440\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044e get_roc_curve, \u043e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0430\u043c ROC \u043a\u0440\u0438\u0432\u0443\u044e (true positive rate, false positive rate \u0438 tresholds). ROC \u043a\u0440\u0438\u0432\u0430\u044f \u2013 \u044d\u0442\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c tpr \u043e\u0442 fpr \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0432\u0443\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0439.  <\/p>\n<pre><code>from catboost.utils import get_roc_curve import sklearn from sklearn import metrics  eval_pool = Pool(X_test, y_test, cat_features=cat_features) curve = get_roc_curve(model, eval_pool) (fpr, tpr, thresholds)=curve roc_auc=sklearn.metrics.auc(fpr, tpr)<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c ROC \u043a\u0440\u0438\u0432\u0443\u044e:  <\/p>\n<pre><code>import matplotlib.pyplot as plt  plt.figure(figsize=(16, 8)) lw=2  plt.plot(fpr, tpr, color='darkorange',          lw=lw, label='ROC curve (area = %0.2f)' % roc_auc, alpha=0.5)  plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--', alpha=0.5)  plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xticks(fontsize=16) plt.yticks(fontsize=16) plt.grid(True) plt.xlabel('False Positive Rate', fontsize=16) plt.ylabel('True Positive Rate', fontsize=16) plt.title('Receiver operating characteristic', fontsize=20) plt.legend(loc=\"lower right\", fontsize=16) plt.show()<\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"525\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4dd\/545\/870\/4dd54587019b3d7f0d5baf528c0497b2.png\" data-width=\"1024\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043b\u043e\u0449\u0430\u0434\u044c \u043f\u043e\u0434 ROC \u043a\u0440\u0438\u0432\u043e\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f AUC, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043b\u043e\u0449\u0430\u0434\u044c AUC, \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435, \u0442\u0435\u043c \u043c\u044b \u0431\u043b\u0438\u0436\u0435 \u043a \u043d\u0430\u0448\u0435\u0439 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 (1.0).<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442 FPR, FNR \u0438 THRESHOLD:<\/p>\n<pre><code>from catboost.utils import get_fpr_curve from catboost.utils import get_fnr_curve  (thresholds, fpr) = get_fpr_curve(curve=curve) (thresholds, fnr) = get_fnr_curve(curve=curve)<\/code><\/pre>\n<p>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u0443\u044e \u043a\u0440\u0438\u0432\u0443\u044e:  <\/p>\n<pre><code>plt.figure(figsize=(16, 8)) lw=2  plt.plot(thresholds, fpr, color='blue', lw=lw, label='FPR', alpha=0.5) plt.plot(thresholds, fpr, color='green', lw=lw, label='FNR', alpha=0.5)  plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xticks(fontsize=16) plt.yticks(fontsize=16) plt.grid(True) plt.xlabel('Thresholds', fontsize=16) plt.ylabel('Error rate', fontsize=16) plt.title('FPR-FNR curves', fontsize=16) plt.legend(loc='lower left', fontsize=16) plt.show()<\/code><\/pre>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"\/img\/image-loader.svg\" height=\"524\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8c7\/201\/8cd\/8c72018cd072ddd6f8289c56b538d5c2.png\" data-width=\"1024\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435, \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f select_treshold:  <\/p>\n<pre><code>from catboost.utils import select_threshold  print(select_threshold(model=model, data=eval_pool, FNR=0.01)) print(select_threshold(model=model, data=eval_pool, FPR=0.01))  0.5323909210615109 0.9895850986242051<\/code><\/pre>\n<p>\u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0432 0.5323, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 0.9895. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0434\u043e \u0431\u0440\u0430\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0432 0.5, \u044d\u0442\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438, \u0433\u0434\u0435 \u043d\u0430\u043c \u0441\u0442\u0440\u0430\u0448\u043d\u0435\u0435 \u043e\u0448\u0438\u0431\u0438\u0442\u044c\u0441\u044f, \u0430 \u0433\u0434\u0435 \u044d\u0442\u043e \u043d\u0435 \u0441\u0442\u043e\u043b\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e \u0438 \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e Snapshot. \u0411\u044b\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0441\u0432\u0435\u0442, \u0437\u0430\u0432\u0438\u0441 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\/\u043d\u043e\u0443\u0442\u0431\u0443\u043a \u0438\u043b\u0438 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0434\u0440\u0443\u0433\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u043f\u0430\u043b\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0438 \u0442\u0443\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u043e \u043d\u043e\u0432\u043e\u0439, \u043d\u043e \u0434\u0430\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u0432 Catboost \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438:<\/p>\n<pre><code>from catboost import CatBoostClassifier  model = CatBoostClassifier(     iterations=150,     save_snapshot=True,     snapshot_file='shapshot.bkp', # \u0412 \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430\u0448 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441     snapshot_interval=1, # \u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u044d\u043f\u0448\u043e\u0442     random_seed=42 )  model.fit(     X_train, y_train,     eval_set=(X_test, y_test),     cat_features=cat_features,     verbose=True )<\/code><\/pre>\n<p>\u0421\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0438 \u043d\u0430 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438:  <\/p>\n<pre><code>1080:\tlearn: 0.1174802\ttest: 0.1512820\tbest: 0.1506310 (585)\ttotal: 16.3s\tremaining: 13.9s 1081:\tlearn: 0.1174613\ttest: 0.1512905\tbest: 0.1506310 (585)\ttotal: 16.3s\tremaining: 13.8s 1082:\tlearn: 0.1174327\ttest: 0.1512617\tbest: 0.1506310 (585)\ttotal: 16.3s\tremaining: 13.8s 1083:\tlearn: 0.1174143\ttest: 0.1512679\tbest: 0.1506310 (585)\ttotal: 16.3s\tremaining: 13.8s --------------------------------------------------------------------------- KeyboardInterrupt                         Traceback (most recent call last) &lt;ipython-input-45-aab67cd70f42> in &lt;module>       9 )      10  ---> 11 model.fit(      12     X_train, y_train,      13     eval_set=(X_test, y_test),<\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u044f\u0447\u0435\u0439\u043a\u0443 \u043e\u043f\u044f\u0442\u044c \u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u0441 1083 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438:  <\/p>\n<pre><code>1083:\tlearn: 0.1174143\ttest: 0.1512679\tbest: 0.1506310 (585)\ttotal: 16.3s\tremaining: 14.1s 1084:\tlearn: 0.1173739\ttest: 0.1512903\tbest: 0.1506310 (585)\ttotal: 16.3s\tremaining: 14.1s 1085:\tlearn: 0.1173333\ttest: 0.1512818\tbest: 0.1506310 (585)\ttotal: 16.4s\tremaining: 14s 1086:\tlearn: 0.1172675\ttest: 0.1512872\tbest: 0.1506310 (585)\ttotal: 16.4s\tremaining: 14.1s 1087:\tlearn: 0.1172435\ttest: 0.1512959\tbest: 0.1506310 (585)\ttotal: 16.4s\tremaining: 14.1s 1088:\tlearn: 0.1171932\ttest: 0.1512984\tbest: 0.1506310 (585)\ttotal: 16.4s\tremaining: 14.1s 1089:\tlearn: 0.1171045\ttest: 0.1513513\tbest: 0.1506310 (585)\ttotal: 16.4s\tremaining: 14s 1090:\tlearn: 0.1170768\ttest: 0.1513511\tbest: 0.1506310 (585)\ttotal: 16.4s\tremaining: 14s 1091:\tlearn: 0.1170621\ttest: 0.1513434\tbest: 0.1506310 (585)\ttotal: 16.5s\tremaining: 14s 1092:\tlearn: 0.1170396\ttest: 0.1513455\tbest: 0.1506310 (585)\ttotal: 16.5s\tremaining: 14s 1093:\tlearn: 0.1170104\ttest: 0.1513388\tbest: 0.1506310 (585)\ttotal: 16.5s\tremaining: 14s 1094:\tlearn: 0.1169427\ttest: 0.1513257\tbest: 0.1506310 (585)\ttotal: 16.5s\tremaining: 14s 1095:\tlearn: 0.1169269\ttest: 0.1513051\tbest: 0.1506310 (585)\ttotal: 16.5s\tremaining: 14s<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f. \u0412 Catboost\u2019e \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u0430\u043a predict_proba, \u043e\u043d\u0430 \u0432\u044b\u0434\u0430\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0432 Scikit Learn \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u043d\u043e\u0441\u0442\u0438 \u043a \u043d\u0443\u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0443, \u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u043d\u043e\u0441\u0442\u0438 \u043a \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0443:  <\/p>\n<pre><code>print(model.predict_proba(X_test))  [[0.0155 0.9845]  [0.0064 0.9936]  [0.0137 0.9863]  ...  [0.0472 0.9528]  [0.0091 0.9909]  [0.0121 0.9879]]<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e \u043c\u0435\u0442\u043e\u0434 predict. \u041e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a\u043b\u0430\u0441\u0441\u044b, \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c 0.5:  <\/p>\n<pre><code>print(model.predict(X_test))  [1 1 1 ... 1 1 1]<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0442\u0438\u043f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u00abRawFormulaVal\u00bb, \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435? \u0411\u0443\u0441\u0442\u0438\u043d\u0433 \u0442\u0440\u0443\u0434\u043d\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u0430 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 0 \u0434\u043e 1, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0443\u0441\u0442\u0438\u043d\u0433\u0430 \u044d\u0442\u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432, \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0434\u0435\u0440\u0435\u0432\u0443 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0443\u043c\u043c\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u044b \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0447\u0438\u0441\u043b\u0430 \u043e\u0442 \u043c\u0438\u043d\u0443\u0441 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0438 \u0434\u043e \u043f\u043b\u044e\u0441 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u0438\u0433\u043c\u043e\u0439\u0434\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 \u043e\u0442 0 \u0434\u043e 1.  <\/p>\n<pre><code>raw_pred = model.predict(     X_test,     prediction_type='RawFormulaVal' )  print(raw_pred)  [4.1528 5.0524 4.2755 ... 3.0048 4.6904 4.4035]<\/code><\/pre>\n<p>\u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0441\u0438\u0433\u043c\u043e\u0439\u0434\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f:  <\/p>\n<pre><code>from numpy import exp  sigmoid = lambda x: 1 \/ (1 + exp(-x)) probabilities = sigmoid(raw_pred) print(probabilities)  [0.9845 0.9936 0.9863 ... 0.9528 0.9909 0.9879]<\/code><\/pre>\n<p>\u0418 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u043f\u043e\u0441\u043e\u0431, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438:  <\/p>\n<pre><code>X_prepared = X_test.values.astype(str).astype(object)  fast_prediction = model.predict_proba(     FeaturesData(         cat_feature_data=X_prepared,         cat_feature_names=list(X_test)     ) )  print(fast_prediction)  [[0.0155 0.9845]  [0.0064 0.9936]  [0.0137 0.9863]  ...  [0.0472 0.9528]  [0.0091 0.9909]  [0.0121 0.9879]]<\/code><\/pre>\n<p>\u0411\u044b\u0432\u0430\u044e\u0442 \u0441\u043b\u0443\u0447\u0430\u0438, \u043a\u043e\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043e\u0441\u043e\u0431\u0430\u044f \u043c\u0435\u0442\u0440\u0438\u043a\u0430, \u043d\u043e Catboost \u0435\u0435 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442, \u0430 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b \u043f\u0435\u0440\u0435\u043e\u0431\u0443\u0447\u0438\u043b\u0438\u0441\u044c, \u0432 \u0442\u0430\u043a\u0438\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Stage Prediction, \u043e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0442 ntree_start \u0434\u043e ntree_end \u0441 eval_period, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442:  <\/p>\n<pre><code>prediction_gen = model.staged_predict_proba(     X_test,     ntree_start=0,     ntree_end=5,     eval_period=1 )  try:     for iteration, predictions in enumerate(prediction_gen):         print(f\"Iteration: {str(iteration)}, predictions: {predictions}\") except Exception:     pass  Iteration: 0, predictions: [[0.4689 0.5311]  [0.4689 0.5311]  [0.4689 0.5311]  ...  [0.4689 0.5311]  [0.4689 0.5311]  [0.4689 0.5311]] Iteration: 1, predictions: [[0.439 0.561]  [0.439 0.561]  [0.439 0.561]  ...  [0.439 0.561]  [0.439 0.561]  [0.439 0.561]] Iteration: 2, predictions: [[0.4113 0.5887]  [0.4113 0.5887]  [0.4113 0.5887]  ...  [0.4113 0.5887]  [0.4113 0.5887]  [0.4113 0.5887]]  Iteration: 3, predictions: [[0.384 0.616]  [0.384 0.616]  [0.384 0.616]  ...  [0.384 0.616]  [0.384 0.616]  [0.384 0.616]] Iteration: 4, predictions: [[0.359 0.641]  [0.359 0.641]  [0.359 0.641]  ...  [0.359 0.641]  [0.359 0.641]  [0.359 0.641]]<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0443 \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u0430\u043a\u0430\u044f \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u043e \u0432\u0430\u0448\u0435\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u0435 \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0430\u044f.<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u043e \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u044b\u0439 \u0431\u0443\u0441\u0442\u0438\u043d\u0433 \u0441 CatBoost. \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u0437\u0430\u0442\u0440\u043e\u043d\u0443 MultiClassification, Metric Evaluation, Eval Metrics \u0438 Parameter Tuning.<\/p>\n<\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/599827\/\"> https:\/\/habr.com\/ru\/post\/599827\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\" class=\"article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><a href=\"https:\/\/habr.com\/ru\/post\/594077\/\" rel=\"noopener noreferrer nofollow\">\u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u043f\u0440\u043e \u043f\u043e\u043d\u044f\u0442\u0438\u0435 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u0431\u0443\u0441\u0442\u0438\u043d\u0433\u0430, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438 \u0443\u0433\u043b\u0443\u0431\u0438\u043b\u0438\u0441\u044c \u0432 \u043e\u0434\u043d\u0443 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u043e CatBoost \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c Cross Validation, Overfitting Detector, ROC-AUC, SnapShot \u0438 Predict. \u041f\u043e\u0435\u0445\u0430\u043b\u0438!<\/p>\n<p>\u0414\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043c\u044b \u043c\u0435\u0440\u0438\u043b\u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c fold\u2019e (\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0435), \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u0437\u044f\u043b\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043b\u0438 \u043d\u0430\u0448\u0443 \u0432\u044b\u0431\u043e\u0440\u043a\u0443 \u043d\u0430 \u043e\u0431\u0443\u0447\u0430\u044e\u0449\u0443\u044e \u0438 \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e, \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e, \u0432\u0434\u0440\u0443\u0433 \u043c\u044b \u0432\u0437\u044f\u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043d\u0435\u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u0443\u0441\u043e\u043a \u043d\u0430\u0448\u0435\u0433\u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u0430, \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u0430\u043c\u043e\u043c \u043a\u0443\u0441\u043a\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e, \u0430 \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0442\u043e \u0441 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u0440\u0430\u0439\u043d\u0435 \u0433\u0440\u0443\u0441\u0442\u043d\u043e. \u0414\u0430\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Cross Validation.<\/p>\n<p>\u0420\u0430\u0437\u043e\u0431\u044c\u0451\u043c \u043d\u0430\u0448 \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u043d\u0430 \u043a\u0443\u0441\u043e\u0447\u043a\u0438 \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0443\u0447\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043a\u0443\u0441\u043e\u0447\u043a\u043e\u0432. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u0443\u0447\u0430\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u0432\u0441\u0435 \u043a\u0443\u0441\u043a\u0430\u0445 \u043a\u0440\u043e\u043c\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e, \u043d\u0430\u043c \u043d\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044f, \u043f\u043e\u0442\u043e\u043c \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0438 \u0432\u0441\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f \u0434\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043a\u0443\u0441\u043e\u0447\u043a\u0430 \u043d\u0430\u0448\u0435\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438:<\/p>\n<pre><code>from catboost import cv  params = {     'loss_function': 'Logloss',     'iterations': 150,     'custom_loss': 'AUC',     'random_seed': 63,     'learning_rate': 0.5 }  cv_data = cv(     params=params,     pool=Pool(X, label=y, cat_features=cat_features),     fold_count=5, # \u0420\u0430\u0437\u0431\u0438\u0432\u043a\u0430 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043d\u0430 5 \u043a\u0443\u0441\u043e\u0447\u043a\u043e\u0432     shuffle=True, # \u041f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u0435\u043c \u043d\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435     partition_random_seed=0,     plot=True, # \u041d\u0438\u043a\u0443\u0434\u0430 \u0431\u0435\u0437 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430     stratified=True,      verbose=False )<\/code><\/pre>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412\u043d\u043e\u0432\u044c \u0432\u0438\u0434\u0438\u043c \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u043e\u0434\u0430, \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d \u0440\u0438\u0441\u0443\u0435\u0442 \u043d\u0435 \u043e\u0434\u043d\u0443 \u043a\u0440\u0438\u0432\u0443\u044e, \u0430 \u0441\u0440\u0435\u0434\u043d\u044e\u044e \u043a\u0440\u0438\u0432\u0443\u044e \u043f\u043e \u0432\u0441\u0435\u043c fold\u2019a\u043c, \u043d\u043e \u0435\u0441\u043b\u0438 \u0443\u0431\u0440\u0430\u0442\u044c \u0433\u0430\u043b\u043e\u0447\u043a\u0443 \u0441 Standard Deviation, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u043a\u0440\u0438\u0432\u0443\u044e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c fold\u2019\u044b, \u0433\u0434\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043b\u043e\u0445\u043e\u0435 \u0438\u043b\u0438 \u0445\u043e\u0440\u043e\u0448\u0435\u0435.<\/p>\n<p>\u0427\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f Cross Validation? \u0415\u0441\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d pandas\/polars (\u043e\u0431 \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f), \u0442\u043e DataFrame, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e Python \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043b\u0435\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u0440\u043e \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0438:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u044b\u0431\u043e\u0440\u043a\u0435 \u043d\u0430 \u0432\u0441\u0435\u0445 fold\u2019\u0430\u0445.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u044b\u0432\u0435\u0434\u0435\u043c Logloss \u0438 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u0448\u0430\u0433\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043b\u0443\u0447\u0448\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code>best_value = np.min(cv_data['test-Logloss-mean']) best_iter = np.argmin(cv_data['test-Logloss-mean']) print(\"Best validation Logloss score, stratified: {:.4f}+\/-{:.3f} on step {}\".format( best_value, cv_data['test-Logloss-std'][best_iter], best_iter))  Best validation Logloss score, stratified: 0.1577+\/-0.002 on step 52<\/code><\/pre>\n<p>\u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043b\u0443\u0447\u0448\u0438\u0439 Logloss \u0440\u0430\u0432\u0435\u043d 0.1577 \u0438 \u043e\u043d \u0431\u044b\u043b \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u043d\u0430 52 \u0448\u0430\u0433\u0435 \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435\u043c 0.002.<\/p>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u043b Overfitting Detector, \u0447\u0442\u043e \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435? \u042d\u0442\u043e \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f, \u0448\u0438\u043a\u0430\u0440\u043d\u0430\u044f \u0432\u0435\u0449\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f Data Scientist\u2019a. \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043e\u0431\u0443\u0447\u0430\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044c, \u0432\u0441\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u0442\u0430\u043a \u0437\u0430\u0447\u0435\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0438 \u0436\u0434\u0430\u0442\u044c \u043f\u043e\u043a\u0430 \u043f\u0440\u043e\u0439\u0434\u0443\u0442 \u0432\u0441\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043f\u0435\u0440\u0435\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f? \u0412 \u044d\u0442\u043e\u043c \u043a\u0430\u043a \u0440\u0430\u0437 \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0439 \u0432\u044b\u0448\u0435 Overfitting Detector.<\/p>\n<p>\u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 early_stopping_rounds, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0432\u0435\u043d 20, \u0435\u0441\u043b\u0438 \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 20 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043e\u0448\u0438\u0431\u043a\u0430 \u043d\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0443\u0445\u0443\u0434\u0448\u0430\u0435\u0442\u0441\u044f, \u0442\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e:<\/p>\n<pre><code>model_with_early_stop = CatBoostClassifier(     iterations=200,     random_seed=63,     learning_rate=0.5,     early_stopping_rounds=20 )  model_with_early_stop.fit(     X_train, y_train,     cat_features=cat_features,     eval_set=(X_test, y_test),     verbose=False,     plot=True )<\/code><\/pre>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0417\u0434\u0435\u0441\u044c \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u043f\u0435\u0440\u0435\u043e\u0431\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u043d\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 28, \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0435\u0449\u0435 20 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0443\u0445\u0443\u0434\u0448\u0435\u043d\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 48 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438. \u0412\u044b\u0437\u043e\u0432\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e tree_count \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f:  <\/p>\n<pre><code>print(model_with_early_stop.tree_count_)  28<\/code><\/pre>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 Logloss, \u0430 \u043d\u0430 \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u043e\u0441\u043e\u0437\u043d\u0430\u043d\u043d\u0443\u044e \u043c\u0435\u0442\u0440\u0438\u043a\u0443, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 AUC, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c AUC \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c eval_metric. \u041e\u0442\u043c\u0435\u0442\u0438\u043c, \u0447\u0442\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c AUC \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c:  <\/p>\n<pre><code>model_with_early_stop=CatBoostClassifier(     eval_metric='AUC',     iterations=200,     random_seed=63,     learning_rate=0.3,     early_stopping_rounds=20) model_with_early_stop.fit(     X_train,y_train,     cat_features=cat_features,     eval_set=(X_test, y_test),     verbose=False,     plot=True )<\/code><\/pre>\n<p>\u0412\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043d\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 44, \u043f\u0440\u043e\u0448\u043b\u043e \u0435\u0449\u0435 20 \u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e:  <\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412\u044b\u0437\u043e\u0432\u0435\u043c tree_count_ \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432 \u043e\u0442\u0432\u0435\u0442\u0435:  <\/p>\n<pre><code>print(model_with_early_stop.tree_count_)  44<\/code><\/pre>\n<p>\u0415\u0434\u0435\u043c \u0434\u0430\u043b\u0435\u0435\u2026 \u041f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u0440\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044e get_roc_curve, \u043e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0430\u043c ROC \u043a\u0440\u0438\u0432\u0443\u044e (true positive rate, false positive rate \u0438 tresholds). ROC \u043a\u0440\u0438\u0432\u0430\u044f \u2013 \u044d\u0442\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c tpr \u043e\u0442 fpr \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0432\u0443\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0439.  <\/p>\n<pre><code>from catboost.utils import get_roc_curve import sklearn from sklearn import metrics  eval_pool = Pool(X_test, y_test, cat_features=cat_features) curve = get_roc_curve(model, eval_pool) (fpr, tpr, thresholds)=curve roc_auc=sklearn.metrics.auc(fpr, tpr)<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c ROC \u043a\u0440\u0438\u0432\u0443\u044e:  <\/p>\n<pre><code>import matplotlib.pyplot as plt  plt.figure(figsize=(16, 8)) lw=2  plt.plot(fpr, tpr, color='darkorange',          lw=lw, label='ROC curve (area = %0.2f)' % roc_auc, alpha=0.5)  plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--', alpha=0.5)  plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xticks(fontsize=16) plt.yticks(fontsize=16) plt.grid(True) plt.xlabel('False Positive Rate', fontsize=16) plt.ylabel('True Positive Rate', fontsize=16) plt.title('Receiver operating characteristic', fontsize=20) plt.legend(loc=\"lower right\", fontsize=16) plt.show()<\/code><\/pre>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043b\u043e\u0449\u0430\u0434\u044c \u043f\u043e\u0434 ROC \u043a\u0440\u0438\u0432\u043e\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f AUC, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043b\u043e\u0449\u0430\u0434\u044c AUC, \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435, \u0442\u0435\u043c \u043c\u044b \u0431\u043b\u0438\u0436\u0435 \u043a \u043d\u0430\u0448\u0435\u0439 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 (1.0).<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u0442 FPR, FNR \u0438 THRESHOLD:<\/p>\n<pre><code>from catboost.utils import get_fpr_curve from catboost.utils import get_fnr_curve  (thresholds, fpr) = get_fpr_curve(curve=curve) (thresholds, fnr) = get_fnr_curve(curve=curve)<\/code><\/pre>\n<p>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u0443\u044e \u043a\u0440\u0438\u0432\u0443\u044e:  <\/p>\n<pre><code>plt.figure(figsize=(16, 8)) lw=2  plt.plot(thresholds, fpr, color='blue', lw=lw, label='FPR', alpha=0.5) plt.plot(thresholds, fpr, color='green', lw=lw, label='FNR', alpha=0.5)  plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xticks(fontsize=16) plt.yticks(fontsize=16) plt.grid(True) plt.xlabel('Thresholds', fontsize=16) plt.ylabel('Error rate', fontsize=16) plt.title('FPR-FNR curves', fontsize=16) plt.legend(loc='lower left', fontsize=16) plt.show()<\/code><\/pre>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435, \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f select_treshold:  <\/p>\n<pre><code>from catboost.utils import select_threshold  print(select_threshold(model=model, data=eval_pool, FNR=0.01)) print(select_threshold(model=model, data=eval_pool, FPR=0.01))  0.5323909210615109 0.9895850986242051<\/code><\/pre>\n<p>\u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0432 0.5323, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 0.9895. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0434\u043e \u0431\u0440\u0430\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0432 0.5, \u044d\u0442\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438, \u0433\u0434\u0435 \u043d\u0430\u043c \u0441\u0442\u0440\u0430\u0448\u043d\u0435\u0435 \u043e\u0448\u0438\u0431\u0438\u0442\u044c\u0441\u044f, \u0430 \u0433\u0434\u0435 \u044d\u0442\u043e \u043d\u0435 \u0441\u0442\u043e\u043b\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e \u0438 \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e Snapshot. \u0411\u044b\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0441\u0432\u0435\u0442, \u0437\u0430\u0432\u0438\u0441 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\/\u043d\u043e\u0443\u0442\u0431\u0443\u043a \u0438\u043b\u0438 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0434\u0440\u0443\u0433\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443\u043f\u0430\u043b\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0438 \u0442\u0443\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u043e \u043d\u043e\u0432\u043e\u0439, \u043d\u043e \u0434\u0430\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u0432 Catboost \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438:<\/p>\n<pre><code>from catboost import CatBoostClassifier  model = CatBoostClassifier(     iterations=150,     save_snapshot=True,     snapshot_file='shapshot.bkp', # \u0412 \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430\u0448 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441     snapshot_interval=1, # \u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u044d\u043f\u0448\u043e\u0442     random_seed=42 )  model.fit(     X_train, y_train,     eval_set=(X_test, y_test),     cat_features=cat_features,     verbose=True )<\/code><\/pre>\n<p>\u0421\u043c\u043e\u0434\u0435\u043b\u0438\u0440\u0443\u0435\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0438 \u043d\u0430 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438:  <\/p>\n<pre><code>1080:\tlearn: 0.1174802\ttest: 0.1512820\tbest: 0.1506310 (585)\ttotal: 16.3s\tremaining: 13.9s 1081:\tlearn: 0.1174613\ttest: 0.1512905\tbest: 0.1506310 (585)\ttotal: 16.3s\tremaining: 13.8s 1082:\tlearn: 0.1174327\ttest: 0.1512617\tbest: 0.1506310 (585)\ttotal: 16.3s\tremaining: 13.8s 1083:\tlearn: 0.1174143\ttest: 0.1512679\tbest: 0.1506310 (585)\ttotal: 16.3s\tremaining: 13.8s --------------------------------------------------------------------------- KeyboardInterrupt                         Traceback (most recent call last) &lt;ipython-input-45-aab67cd70f42> in &lt;module>       9 )      10  ---> 11 model.fit(      12     X_train, y_train,      13     eval_set=(X_test, y_test),<\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u044f\u0447\u0435\u0439\u043a\u0443 \u043e\u043f\u044f\u0442\u044c \u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u0441 1083 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438:  <\/p>\n<pre><code>1083:\tlearn: 0.1174143\ttest: 0.1512679\tbest: 0.1506310 (585)\ttotal: 16.3s\tremaining: 14.1s 1084:\tlearn: 0.1173739\ttest: 0.1512903\tbest: 0.1506310 (585)\ttotal: 16.3s\tremaining: 14.1s 1085:\tlearn: 0.1173333\ttest: 0.1512818\tbest: 0.1506310 (585)\ttotal: 16.4s\tremaining: 14s 1086:\tlearn: 0.1172675\ttest: 0.1512872\tbest: 0.1506310 (585)\ttotal: 16.4s\tremaining: 14.1s 1087:\tlearn: 0.1172435\ttest: 0.1512959\tbest: 0.1506310 (585)\ttotal: 16.4s\tremaining: 14.1s 1088:\tlearn: 0.1171932\ttest: 0.1512984\tbest: 0.1506310 (585)\ttotal: 16.4s\tremaining: 14.1s 1089:\tlearn: 0.1171045\ttest: 0.1513513\tbest: 0.1506310 (585)\ttotal: 16.4s\tremaining: 14s 1090:\tlearn: 0.1170768\ttest: 0.1513511\tbest: 0.1506310 (585)\ttotal: 16.4s\tremaining: 14s 1091:\tlearn: 0.1170621\ttest: 0.1513434\tbest: 0.1506310 (585)\ttotal: 16.5s\tremaining: 14s 1092:\tlearn: 0.1170396\ttest: 0.1513455\tbest: 0.1506310 (585)\ttotal: 16.5s\tremaining: 14s 1093:\tlearn: 0.1170104\ttest: 0.1513388\tbest: 0.1506310 (585)\ttotal: 16.5s\tremaining: 14s 1094:\tlearn: 0.1169427\ttest: 0.1513257\tbest: 0.1506310 (585)\ttotal: 16.5s\tremaining: 14s 1095:\tlearn: 0.1169269\ttest: 0.1513051\tbest: 0.1506310 (585)\ttotal: 16.5s\tremaining: 14s<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f. \u0412 Catboost\u2019e \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u0430\u043a predict_proba, \u043e\u043d\u0430 \u0432\u044b\u0434\u0430\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0432 Scikit Learn \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u043d\u043e\u0441\u0442\u0438 \u043a \u043d\u0443\u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0443, \u0430 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u043d\u043e\u0441\u0442\u0438 \u043a \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0443:  <\/p>\n<pre><code>print(model.predict_proba(X_test))<\/code><\/pre>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-326793","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/326793","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=326793"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/326793\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=326793"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=326793"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=326793"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}