This script demonstrates basic use of catboost (CV 0.377750059602, LB 0.3802708)

I believe higher scores are possible - I got better early results without using aisle, so there may be an issue with how I set it up - maybe you can make it work better? ;)

The core of the script is based from "LB 0.3805009, Python Edition" by 🐳鲲(China), the catboost settings are taken from Fred Navruzov's posts, and the CV code is reused from my earlier notebook.

Original notes:

This script is translate from @Fabienvs's R code, I think it may help kagglers who do not use R.
I really appreciate @Fabienvs's great work, to be honest, I have no idea about how to handling this kind of problem(this is the first time I encounter recommendation problem- -)
here we go!! below exist some very useful functions I write by my own, you can download from my github repo sorry for adding some Chinese in it, it would not affect the code

The dataset is too big, you should run it on your desktop!


In [1]:
# This Python 3 environment comes with many helpful analytics libraries installed
# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python
# For example, here's several helpful packages to load in 
import gc
import time
import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)

# Input data files are available in the "../input/" directory.
# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory

from subprocess import check_output
print(check_output(["ls", "../input"]).decode("utf8"))

# Any results you write to the current directory are saved as output.


__MACOSX
aisles.csv
aisles.csv.zip
departments.csv
departments.csv.zip
order_products__prior.csv
order_products__prior.csv.zip
order_products__train.csv
order_products__train.csv.zip
orders.csv
orders.csv.zip
products.csv
products.csv.zip
sample_submission.csv
sample_submission.csv (1).zip


In [2]:
import xgboost
import catboost


/opt/conda/lib/python3.6/importlib/_bootstrap.py:205: RuntimeWarning: compiletime version 3.5 of module '_catboost' does not match runtime version 3.6
  return f(*args, **kwds)

In [3]:
def load_data(path_data):
    '''
    --------------------------------order_product--------------------------------
    * Unique in order_id + product_id
    '''
    priors = pd.read_csv(path_data + 'order_products__prior.csv', 
                     dtype={
                            'order_id': np.int32,
                            'product_id': np.uint16,
                            'add_to_cart_order': np.int16,
                            'reordered': np.int8})
    train = pd.read_csv(path_data + 'order_products__train.csv', 
                    dtype={
                            'order_id': np.int32,
                            'product_id': np.uint16,
                            'add_to_cart_order': np.int16,
                            'reordered': np.int8})
    '''
    --------------------------------order--------------------------------
    * This file tells us which set (prior, train, test) an order belongs
    * Unique in order_id
    * order_id in train, prior, test has no intersection
    * this is the #order_number order of this user
    '''
    orders = pd.read_csv(path_data + 'orders.csv', 
                         dtype={
                                'order_id': np.int32,
                                'user_id': np.int64,
                                'eval_set': 'category',
                                'order_number': np.int16,
                                'order_dow': np.int8,
                                'order_hour_of_day': np.int8,
                                'days_since_prior_order': np.float32})

    #  order in prior, train, test has no duplicate
    #  order_ids_pri = priors.order_id.unique()
    #  order_ids_trn = train.order_id.unique()
    #  order_ids_tst = orders[orders.eval_set == 'test']['order_id'].unique()
    #  print(set(order_ids_pri).intersection(set(order_ids_trn)))
    #  print(set(order_ids_pri).intersection(set(order_ids_tst)))
    #  print(set(order_ids_trn).intersection(set(order_ids_tst)))

    '''
    --------------------------------product--------------------------------
    * Unique in product_id
    '''
    products = pd.read_csv(path_data + 'products.csv')
    aisles = pd.read_csv(path_data + "aisles.csv")
    departments = pd.read_csv(path_data + "departments.csv")
    sample_submission = pd.read_csv(path_data + "sample_submission.csv")
    
    return priors, train, orders, products, aisles, departments, sample_submission

class tick_tock:
    def __init__(self, process_name, verbose=1):
        self.process_name = process_name
        self.verbose = verbose
    def __enter__(self):
        if self.verbose:
            print(self.process_name + " begin ......")
            self.begin_time = time.time()
    def __exit__(self, type, value, traceback):
        if self.verbose:
            end_time = time.time()
            print(self.process_name + " end ......")
            print('time lapsing {0} s \n'.format(end_time - self.begin_time))
            
def ka_add_groupby_features_1_vs_n(df, group_columns_list, agg_dict, only_new_feature=True):
    '''Create statistical columns, group by [N columns] and compute stats on [N column]

       Parameters
       ----------
       df: pandas dataframe
          Features matrix
       group_columns_list: list_like
          List of columns you want to group with, could be multiple columns
       agg_dict: python dictionary

       Return
       ------
       new pandas dataframe with original columns and new added columns

       Example
       -------
       {real_column_name: {your_specified_new_column_name : method}}
       agg_dict = {'user_id':{'prod_tot_cnts':'count'},
                   'reordered':{'reorder_tot_cnts_of_this_prod':'sum'},
                   'user_buy_product_times': {'prod_order_once':lambda x: sum(x==1),
                                              'prod_order_more_than_once':lambda x: sum(x==2)}}
       ka_add_stats_features_1_vs_n(train, ['product_id'], agg_dict)
    '''
    with tick_tock("add stats features"):
        try:
            if type(group_columns_list) == list:
                pass
            else:
                raise TypeError(k + "should be a list")
        except TypeError as e:
            print(e)
            raise

        df_new = df.copy()
        grouped = df_new.groupby(group_columns_list)

        the_stats = grouped.agg(agg_dict)
        the_stats.columns = the_stats.columns.droplevel(0)
        the_stats.reset_index(inplace=True)
        if only_new_feature:
            df_new = the_stats
        else:
            df_new = pd.merge(left=df_new, right=the_stats, on=group_columns_list, how='left')

    return df_new

def ka_add_groupby_features_n_vs_1(df, group_columns_list, target_columns_list, methods_list, keep_only_stats=True, verbose=1):
    '''Create statistical columns, group by [N columns] and compute stats on [1 column]

       Parameters
       ----------
       df: pandas dataframe
          Features matrix
       group_columns_list: list_like
          List of columns you want to group with, could be multiple columns
       target_columns_list: list_like
          column you want to compute stats, need to be a list with only one element
       methods_list: list_like
          methods that you want to use, all methods that supported by groupby in Pandas

       Return
       ------
       new pandas dataframe with original columns and new added columns

       Example
       -------
       ka_add_stats_features_n_vs_1(train, group_columns_list=['x0'], target_columns_list=['x10'])
    '''
    with tick_tock("add stats features", verbose):
        dicts = {"group_columns_list": group_columns_list , "target_columns_list": target_columns_list, "methods_list" :methods_list}

        for k, v in dicts.items():
            try:
                if type(v) == list:
                    pass
                else:
                    raise TypeError(k + "should be a list")
            except TypeError as e:
                print(e)
                raise

        grouped_name = ''.join(group_columns_list)
        target_name = ''.join(target_columns_list)
        combine_name = [[grouped_name] + [method_name] + [target_name] for method_name in methods_list]

        df_new = df.copy()
        grouped = df_new.groupby(group_columns_list)

        the_stats = grouped[target_name].agg(methods_list).reset_index()
        the_stats.columns = [grouped_name] + \
                            ['_%s_%s_by_%s' % (grouped_name, method_name, target_name) \
                             for (grouped_name, method_name, target_name) in combine_name]
        if keep_only_stats:
            return the_stats
        else:
            df_new = pd.merge(left=df_new, right=the_stats, on=group_columns_list, how='left')
        return df_new

In [4]:
path_data = '../input/'
priors, train, orders, products, aisles, departments, sample_submission = load_data(path_data)

Time-saving measure for local work - cache a local copy of the final dataframe


In [5]:
try:
    data = pd.read_pickle('kernel38-data.pkl')
except:

    # Product part

    # Products information ----------------------------------------------------------------
    # add order information to priors set
    priors_orders_detail = orders.merge(right=priors, how='inner', on='order_id')

    # create new variables
    # _user_buy_product_times: 用户是第几次购买该商品
    priors_orders_detail.loc[:,'_user_buy_product_times'] = priors_orders_detail.groupby(['user_id', 'product_id']).cumcount() + 1
    # _prod_tot_cnts: 该商品被购买的总次数,表明被喜欢的程度
    # _reorder_tot_cnts_of_this_prod: 这件商品被再次购买的总次数
    ### 我觉得下面两个很不好理解,考虑改变++++++++++++++++++++++++++
    # _prod_order_once: 该商品被购买一次的总次数
    # _prod_order_more_than_once: 该商品被购买一次以上的总次数
    agg_dict = {'user_id':{'_prod_tot_cnts':'count'}, 
                'reordered':{'_prod_reorder_tot_cnts':'sum'}, 
                '_user_buy_product_times': {'_prod_buy_first_time_total_cnt':lambda x: sum(x==1),
                                            '_prod_buy_second_time_total_cnt':lambda x: sum(x==2)}}
    prd = ka_add_groupby_features_1_vs_n(priors_orders_detail, ['product_id'], agg_dict)

    # _prod_reorder_prob: 这个指标不好理解
    # _prod_reorder_ratio: 商品复购率
    prd['_prod_reorder_prob'] = prd._prod_buy_second_time_total_cnt / prd._prod_buy_first_time_total_cnt
    prd['_prod_reorder_ratio'] = prd._prod_reorder_tot_cnts / prd._prod_tot_cnts
    prd['_prod_reorder_times'] = 1 + prd._prod_reorder_tot_cnts / prd._prod_buy_first_time_total_cnt

    prd.head()

    # User Part

    # _user_total_orders: 用户的总订单数
    # 可以考虑加入其它统计指标++++++++++++++++++++++++++
    # _user_sum_days_since_prior_order: 距离上次购买时间(和),这个只能在orders表里面计算,priors_orders_detail不是在order level上面unique
    # _user_mean_days_since_prior_order: 距离上次购买时间(均值)
    agg_dict_2 = {'order_number':{'_user_total_orders':'max'},
                  'days_since_prior_order':{'_user_sum_days_since_prior_order':'sum', 
                                            '_user_mean_days_since_prior_order': 'mean'}}
    users = ka_add_groupby_features_1_vs_n(orders[orders.eval_set == 'prior'], ['user_id'], agg_dict_2)

    # _user_reorder_ratio: reorder的总次数 / 第一单后买后的总次数
    # _user_total_products: 用户购买的总商品数
    # _user_distinct_products: 用户购买的unique商品数
    agg_dict_3 = {'reordered':
                  {'_user_reorder_ratio': 
                   lambda x: sum(priors_orders_detail.ix[x.index,'reordered']==1)/
                             sum(priors_orders_detail.ix[x.index,'order_number'] > 1)},
                  'product_id':{'_user_total_products':'count', 
                                '_user_distinct_products': lambda x: x.nunique()}}
    us = ka_add_groupby_features_1_vs_n(priors_orders_detail, ['user_id'], agg_dict_3)
    users = users.merge(us, how='inner')

    # 平均每单的商品数
    # 每单中最多的商品数,最少的商品数++++++++++++++
    users['_user_average_basket'] = users._user_total_products / users._user_total_orders

    us = orders[orders.eval_set != "prior"][['user_id', 'order_id', 'eval_set', 'days_since_prior_order']]
    us.rename(index=str, columns={'days_since_prior_order': 'time_since_last_order'}, inplace=True)

    users = users.merge(us, how='inner')

    users.head()

    # Database Part

    # 这里应该还有很多变量可以被添加
    # _up_order_count: 用户购买该商品的次数
    # _up_first_order_number: 用户第一次购买该商品所处的订单数
    # _up_last_order_number: 用户最后一次购买该商品所处的订单数
    # _up_average_cart_position: 该商品被添加到购物篮中的平均位置
    agg_dict_4 = {'order_number':{'_up_order_count': 'count', 
                                  '_up_first_order_number': 'min', 
                                  '_up_last_order_number':'max'}, 
                  'add_to_cart_order':{'_up_average_cart_position': 'mean'}}

    data = ka_add_groupby_features_1_vs_n(df=priors_orders_detail, 
                                                          group_columns_list=['user_id', 'product_id'], 
                                                          agg_dict=agg_dict_4)

    data = data.merge(prd, how='inner', on='product_id').merge(users, how='inner', on='user_id')
    # 该商品购买次数 / 总的订单数
    # 最近一次购买商品 - 最后一次购买该商品
    # 该商品购买次数 / 第一次购买该商品到最后一次购买商品的的订单数
    data['_up_order_rate'] = data._up_order_count / data._user_total_orders
    data['_up_order_since_last_order'] = data._user_total_orders - data._up_last_order_number
    data['_up_order_rate_since_first_order'] = data._up_order_count / (data._user_total_orders - data._up_first_order_number + 1)

    # add user_id to train set
    train = train.merge(right=orders[['order_id', 'user_id']], how='left', on='order_id')
    data = data.merge(train[['user_id', 'product_id', 'reordered']], on=['user_id', 'product_id'], how='left')

    # release Memory
    # del train, prd, users
    # gc.collect()
    # release Memory
    del priors_orders_detail, orders
    gc.collect()

    data.head()
    
    data.to_pickle('kernel38-data.pkl')

Validation code


In [6]:
try:
    df_train_gt = pd.read_csv('train.csv', index_col='order_id')
except:
    train_gtl = []

    for uid, subset in train_details.groupby('user_id'):
        subset1 = subset[subset.reordered == 1]
        oid = subset.order_id.values[0]

        if len(subset1) == 0:
            train_gtl.append((oid, 'None'))
            continue

        ostr = ' '.join([str(int(e)) for e in subset1.product_id.values])
        # .strip is needed because join can have a padding space at the end
        train_gtl.append((oid, ostr.strip()))

    df_train_gt = pd.DataFrame(train_gtl)

    df_train_gt.columns = ['order_id', 'products']
    df_train_gt.set_index('order_id', inplace=True)
    df_train_gt.sort_index(inplace=True)
    
    df_train_gt.to_csv('train.csv')

In [7]:
def compare_results(df_gt, df_preds):
    
    df_gt_cut = df_gt.loc[df_preds.index]
    
    f1 = []
    for gt, pred in zip(df_gt_cut.sort_index().products, df_preds.sort_index().products):
        lgt = gt.replace("None", "-1").split(' ')
        lpred = pred.replace("None", "-1").split(' ')

        rr = (np.intersect1d(lgt, lpred))
        precision = np.float(len(rr)) / len(lpred)
        recall = np.float(len(rr)) / len(lgt)

        denom = precision + recall
        f1.append(((2 * precision * recall) / denom) if denom > 0 else 0)

    #print(np.mean(f1))
    return(np.mean(f1))

Create Train / Test

Add aisle and dept id for catboost


In [8]:
data = pd.merge(data, products.drop('product_name', axis=1), on='product_id')

In [16]:
X_test = data.loc[data.eval_set == "test",:].copy()
X_test.drop(['eval_set'], axis=1, inplace=True)

In [9]:
train = data.loc[data.eval_set == "train",:].copy()
train.drop(['eval_set'], axis=1, inplace=True)
train.loc[:, 'reordered'] = train.reordered.fillna(0)

perform CV for catboost


In [10]:
def catboost_cv(X_train, y_train, X_val, y_val, features_to_use):
    cb = catboost.CatBoostClassifier(iterations=100, 
        thread_count=8, 
        verbose=True,
        random_seed=42,
        learning_rate=0.05,
        use_best_model=True,
        depth=8,
        fold_permutation_block_size=64,
        calc_feature_importance=True,
        leaf_estimation_method='Gradient')

    cb.fit(X=X_train[features_to_use].values, 
            y=y_train.values, 
            #cat_features=[c.get_loc('aisle_id'), c.get_loc('department_id')], 
            cat_features=[X_train[features_to_use].columns.get_loc('aisle_id')], 
            eval_set=[X_val[features_to_use].values, y_val.values],
            verbose=True,
            #plot=True
           )
    
    return cb

In [ ]:
df_cvfolds = []
cb = []

for fold in range(4):
    train_subset = train[train.user_id % 4 != fold]
    valid_subset = train[train.user_id % 4 == fold]

    X_train = train_subset.drop('reordered', axis=1)
    y_train = train_subset.reordered

    X_val = valid_subset.drop('reordered', axis=1)
    y_val = valid_subset.reordered

    val_index = X_val[['user_id', 'product_id', 'order_id']]
    
    features_to_use = list(X_train.columns)
    features_to_use.remove('user_id')
    features_to_use.remove('product_id')
    features_to_use.remove('order_id')

    cb.append(catboost_cv(X_train, y_train, X_val, y_val, features_to_use))
    rawpreds = cb[-1].predict_proba(X_val[features_to_use].values)

    lim = .202
    val_out = val_index.copy()

    val_out.loc[:,'reordered'] = (rawpreds[:,1] > lim).astype(int)
    val_out.loc[:, 'product_id'] = val_out.product_id.astype(str)
    presubmit = ka_add_groupby_features_n_vs_1(val_out[val_out.reordered == 1], 
                                                   group_columns_list=['order_id'],
                                                   target_columns_list= ['product_id'],
                                                   methods_list=[lambda x: ' '.join(set(x))], keep_only_stats=True)

    presubmit = presubmit.set_index('order_id')
    presubmit.columns = ['products']

    fullfold = pd.DataFrame(index = val_out.order_id.unique())

    fullfold.index.name = 'order_id'
    fullfold['products'] = ['None'] * len(fullfold)

    fullfold.loc[presubmit.index, 'products'] = presubmit.products

    print(fold, compare_results(df_train_gt, fullfold))
    
    df_cvfolds.append(fullfold)


Borders generated
0:	learn 0.635726643	test 0.6356663916	bestTest 0.6356663916	passed: 24.1 sec	total: 35.4s	remaining: 58m 26s
1:	learn 0.5849748625	test 0.5848673064	bestTest 0.5848673064	passed: 24 sec	total: 59.4s	remaining: 48m 31s
2:	learn 0.5419628413	test 0.5418079236	bestTest 0.5418079236	passed: 24.1 sec	total: 1m 23s	remaining: 44m 59s
3:	learn 0.5043970358	test 0.5041678733	bestTest 0.5041678733	passed: 24.2 sec	total: 1m 47s	remaining: 43m 3s
4:	learn 0.471797413	test 0.4715476458	bestTest 0.4715476458	passed: 23.3 sec	total: 2m 10s	remaining: 41m 28s
5:	learn 0.4438987925	test 0.4435939042	bestTest 0.4435939042	passed: 23.2 sec	total: 2m 34s	remaining: 40m 15s
6:	learn 0.419668827	test 0.4193259158	bestTest 0.4193259158	passed: 21.9 sec	total: 2m 56s	remaining: 38m 58s
7:	learn 0.3989645142	test 0.3986051661	bestTest 0.3986051661	passed: 22.3 sec	total: 3m 18s	remaining: 38m
8:	learn 0.3816517539	test 0.3812821972	bestTest 0.3812821972	passed: 23.7 sec	total: 3m 42s	remaining: 37m 25s
9:	learn 0.366324745	test 0.3659397509	bestTest 0.3659397509	passed: 23.9 sec	total: 4m 5s	remaining: 36m 53s
10:	learn 0.3527480649	test 0.3523454742	bestTest 0.3523454742	passed: 21.7 sec	total: 4m 27s	remaining: 36m 5s
11:	learn 0.3410343812	test 0.3406212016	bestTest 0.3406212016	passed: 23.9 sec	total: 4m 51s	remaining: 35m 38s
12:	learn 0.3312514862	test 0.3308284753	bestTest 0.3308284753	passed: 23.7 sec	total: 5m 15s	remaining: 35m 10s
13:	learn 0.3233989154	test 0.3229764427	bestTest 0.3229764427	passed: 22.5 sec	total: 5m 37s	remaining: 34m 34s
14:	learn 0.314890039	test 0.3144448374	bestTest 0.3144448374	passed: 23 sec	total: 6m	remaining: 34m 4s
15:	learn 0.307569097	test 0.3071145985	bestTest 0.3071145985	passed: 24.3 sec	total: 6m 25s	remaining: 33m 41s
16:	learn 0.3016956844	test 0.3012438041	bestTest 0.3012438041	passed: 23.6 sec	total: 6m 48s	remaining: 33m 15s
17:	learn 0.2962526674	test 0.2957864187	bestTest 0.2957864187	passed: 22.3 sec	total: 7m 10s	remaining: 32m 43s
18:	learn 0.2914311779	test 0.2909561944	bestTest 0.2909561944	passed: 22.8 sec	total: 7m 33s	remaining: 32m 14s
19:	learn 0.2874882692	test 0.2870161963	bestTest 0.2870161963	passed: 23.6 sec	total: 7m 57s	remaining: 31m 49s
20:	learn 0.2834056055	test 0.2829164062	bestTest 0.2829164062	passed: 23.4 sec	total: 8m 20s	remaining: 31m 23s
21:	learn 0.279830393	test 0.2793328004	bestTest 0.2793328004	passed: 23.4 sec	total: 8m 44s	remaining: 30m 58s
22:	learn 0.2768366401	test 0.276338908	bestTest 0.276338908	passed: 23.1 sec	total: 9m 7s	remaining: 30m 32s
23:	learn 0.2740599311	test 0.2735594802	bestTest 0.2735594802	passed: 22.2 sec	total: 9m 29s	remaining: 30m 3s
24:	learn 0.2719089717	test 0.271402116	bestTest 0.271402116	passed: 24.6 sec	total: 9m 54s	remaining: 29m 42s
25:	learn 0.2698165233	test 0.2692949405	bestTest 0.2692949405	passed: 22.9 sec	total: 10m 17s	remaining: 29m 16s
26:	learn 0.2677344525	test 0.2672033368	bestTest 0.2672033368	passed: 23.1 sec	total: 10m 40s	remaining: 28m 50s
27:	learn 0.2661034127	test 0.2655596318	bestTest 0.2655596318	passed: 22.1 sec	total: 11m 2s	remaining: 28m 22s
28:	learn 0.2643225147	test 0.2637716515	bestTest 0.2637716515	passed: 23.7 sec	total: 11m 25s	remaining: 27m 59s
29:	learn 0.2629232907	test 0.2623686229	bestTest 0.2623686229	passed: 23.2 sec	total: 11m 49s	remaining: 27m 34s
30:	learn 0.2615328335	test 0.2609730414	bestTest 0.2609730414	passed: 22.9 sec	total: 12m 11s	remaining: 27m 9s
31:	learn 0.260381197	test 0.2598189547	bestTest 0.2598189547	passed: 23.2 sec	total: 12m 35s	remaining: 26m 44s
32:	learn 0.2592545297	test 0.2586831979	bestTest 0.2586831979	passed: 22.7 sec	total: 12m 57s	remaining: 26m 19s
33:	learn 0.2582191552	test 0.25764639	bestTest 0.25764639	passed: 22.6 sec	total: 13m 20s	remaining: 25m 53s
34:	learn 0.2572903818	test 0.2567149176	bestTest 0.2567149176	passed: 24.4 sec	total: 13m 44s	remaining: 25m 31s
35:	learn 0.2566205197	test 0.2560445079	bestTest 0.2560445079	passed: 23.4 sec	total: 14m 8s	remaining: 25m 7s
36:	learn 0.2559828858	test 0.2554021333	bestTest 0.2554021333	passed: 22.5 sec	total: 14m 30s	remaining: 24m 42s
37:	learn 0.2552813304	test 0.2546969613	bestTest 0.2546969613	passed: 23.1 sec	total: 14m 53s	remaining: 24m 18s
38:	learn 0.2546995101	test 0.2541138687	bestTest 0.2541138687	passed: 23 sec	total: 15m 16s	remaining: 23m 54s
39:	learn 0.254127341	test 0.2535378032	bestTest 0.2535378032	passed: 24 sec	total: 15m 40s	remaining: 23m 31s
40:	learn 0.2536385321	test 0.2530492192	bestTest 0.2530492192	passed: 23.7 sec	total: 16m 4s	remaining: 23m 7s
41:	learn 0.2531505548	test 0.2525567808	bestTest 0.2525567808	passed: 23.3 sec	total: 16m 27s	remaining: 22m 44s
42:	learn 0.2526761416	test 0.2520810796	bestTest 0.2520810796	passed: 23.7 sec	total: 16m 51s	remaining: 22m 20s
43:	learn 0.2522383564	test 0.2516422134	bestTest 0.2516422134	passed: 22.2 sec	total: 17m 13s	remaining: 21m 55s
44:	learn 0.2518296792	test 0.2512291929	bestTest 0.2512291929	passed: 23.7 sec	total: 17m 37s	remaining: 21m 32s
45:	learn 0.2514886593	test 0.2508870928	bestTest 0.2508870928	passed: 22.6 sec	total: 18m	remaining: 21m 7s
46:	learn 0.2511653247	test 0.2505607297	bestTest 0.2505607297	passed: 23.4 sec	total: 18m 23s	remaining: 20m 44s
47:	learn 0.2509034901	test 0.2502952069	bestTest 0.2502952069	passed: 23.2 sec	total: 18m 46s	remaining: 20m 20s
48:	learn 0.2506206482	test 0.2500085857	bestTest 0.2500085857	passed: 24.2 sec	total: 19m 10s	remaining: 19m 57s
49:	learn 0.250382167	test 0.2497654072	bestTest 0.2497654072	passed: 22.8 sec	total: 19m 33s	remaining: 19m 33s
50:	learn 0.2501367396	test 0.2495140162	bestTest 0.2495140162	passed: 23.5 sec	total: 19m 57s	remaining: 19m 10s
51:	learn 0.2499208225	test 0.2492954049	bestTest 0.2492954049	passed: 24.1 sec	total: 20m 21s	remaining: 18m 47s
52:	learn 0.2497214133	test 0.249096184	bestTest 0.249096184	passed: 22.1 sec	total: 20m 43s	remaining: 18m 22s
53:	learn 0.2495564882	test 0.2489302377	bestTest 0.2489302377	passed: 24 sec	total: 21m 7s	remaining: 17m 59s
54:	learn 0.2493843218	test 0.2487600224	bestTest 0.2487600224	passed: 23.6 sec	total: 21m 31s	remaining: 17m 36s
55:	learn 0.2492211846	test 0.2485936493	bestTest 0.2485936493	passed: 24.3 sec	total: 21m 55s	remaining: 17m 13s
56:	learn 0.2490382085	test 0.2484131724	bestTest 0.2484131724	passed: 23 sec	total: 22m 18s	remaining: 16m 49s
57:	learn 0.2489127237	test 0.2482855024	bestTest 0.2482855024	passed: 24.7 sec	total: 22m 43s	remaining: 16m 27s
58:	learn 0.2487831359	test 0.2481533442	bestTest 0.2481533442	passed: 22 sec	total: 23m 5s	remaining: 16m 2s
59:	learn 0.2486492386	test 0.2480177844	bestTest 0.2480177844	passed: 22.5 sec	total: 23m 27s	remaining: 15m 38s
60:	learn 0.2485551555	test 0.2479284939	bestTest 0.2479284939	passed: 23.6 sec	total: 23m 51s	remaining: 15m 14s
61:	learn 0.2484322186	test 0.2478049011	bestTest 0.2478049011	passed: 23.2 sec	total: 24m 14s	remaining: 14m 51s
62:	learn 0.248326655	test 0.2477001634	bestTest 0.2477001634	passed: 24.2 sec	total: 24m 38s	remaining: 14m 28s
63:	learn 0.2482340325	test 0.2476095974	bestTest 0.2476095974	passed: 22.5 sec	total: 25m	remaining: 14m 4s
64:	learn 0.2481258788	test 0.2474984502	bestTest 0.2474984502	passed: 23.7 sec	total: 25m 24s	remaining: 13m 40s
65:	learn 0.2480303474	test 0.2474017265	bestTest 0.2474017265	passed: 24.6 sec	total: 25m 49s	remaining: 13m 18s
66:	learn 0.2479523463	test 0.2473231903	bestTest 0.2473231903	passed: 23.1 sec	total: 26m 12s	remaining: 12m 54s
67:	learn 0.2478868206	test 0.2472566104	bestTest 0.2472566104	passed: 22.9 sec	total: 26m 35s	remaining: 12m 30s
68:	learn 0.2477982631	test 0.2471664104	bestTest 0.2471664104	passed: 25.7 sec	total: 27m	remaining: 12m 8s
69:	learn 0.2477212278	test 0.2470908369	bestTest 0.2470908369	passed: 24 sec	total: 27m 24s	remaining: 11m 44s
70:	learn 0.2476555893	test 0.2470246379	bestTest 0.2470246379	passed: 22.7 sec	total: 27m 47s	remaining: 11m 21s
71:	learn 0.2476052726	test 0.2469740751	bestTest 0.2469740751	passed: 23.3 sec	total: 28m 10s	remaining: 10m 57s
72:	learn 0.2475335258	test 0.2469051567	bestTest 0.2469051567	passed: 23.9 sec	total: 28m 34s	remaining: 10m 34s
73:	learn 0.247493069	test 0.2468665488	bestTest 0.2468665488	passed: 24.8 sec	total: 28m 59s	remaining: 10m 11s
74:	learn 0.2474245037	test 0.2467971193	bestTest 0.2467971193	passed: 24.1 sec	total: 29m 23s	remaining: 9m 47s
75:	learn 0.2473777873	test 0.2467520638	bestTest 0.2467520638	passed: 23.8 sec	total: 29m 47s	remaining: 9m 24s
76:	learn 0.2473111497	test 0.2466871984	bestTest 0.2466871984	passed: 23.6 sec	total: 30m 11s	remaining: 9m 1s
77:	learn 0.2472480239	test 0.2466231591	bestTest 0.2466231591	passed: 23.8 sec	total: 30m 34s	remaining: 8m 37s
78:	learn 0.2472141657	test 0.2465896941	bestTest 0.2465896941	passed: 24.6 sec	total: 30m 59s	remaining: 8m 14s
79:	learn 0.2471640091	test 0.2465413823	bestTest 0.2465413823	passed: 24.7 sec	total: 31m 24s	remaining: 7m 51s
80:	learn 0.247124541	test 0.2465062175	bestTest 0.2465062175	passed: 23.1 sec	total: 31m 47s	remaining: 7m 27s
81:	learn 0.2470711883	test 0.2464530508	bestTest 0.2464530508	passed: 24.2 sec	total: 32m 11s	remaining: 7m 4s
82:	learn 0.2470153203	test 0.2463966224	bestTest 0.2463966224	passed: 23.2 sec	total: 32m 34s	remaining: 6m 40s
83:	learn 0.2469732805	test 0.246354374	bestTest 0.246354374	passed: 25.3 sec	total: 33m	remaining: 6m 17s
84:	learn 0.2469306061	test 0.2463139263	bestTest 0.2463139263	passed: 24.4 sec	total: 33m 24s	remaining: 5m 53s
85:	learn 0.2468894485	test 0.2462740774	bestTest 0.2462740774	passed: 24.1 sec	total: 33m 48s	remaining: 5m 30s
86:	learn 0.2468459429	test 0.24623074	bestTest 0.24623074	passed: 23.7 sec	total: 34m 12s	remaining: 5m 6s
87:	learn 0.2468178896	test 0.2462047006	bestTest 0.2462047006	passed: 23.2 sec	total: 34m 35s	remaining: 4m 43s
88:	learn 0.2467871918	test 0.2461737217	bestTest 0.2461737217	passed: 23.1 sec	total: 34m 58s	remaining: 4m 19s
89:	learn 0.2467553962	test 0.2461437993	bestTest 0.2461437993	passed: 22.4 sec	total: 35m 20s	remaining: 3m 55s
90:	learn 0.2467288686	test 0.2461202911	bestTest 0.2461202911	passed: 22.9 sec	total: 35m 43s	remaining: 3m 32s
91:	learn 0.2467064729	test 0.2460997544	bestTest 0.2460997544	passed: 23 sec	total: 36m 6s	remaining: 3m 8s
92:	learn 0.2466820059	test 0.2460766741	bestTest 0.2460766741	passed: 24.2 sec	total: 36m 31s	remaining: 2m 44s
93:	learn 0.2466448057	test 0.2460405683	bestTest 0.2460405683	passed: 24.7 sec	total: 36m 55s	remaining: 2m 21s
94:	learn 0.2466207202	test 0.246017861	bestTest 0.246017861	passed: 22.6 sec	total: 37m 18s	remaining: 1m 57s
95:	learn 0.2465873653	test 0.245984429	bestTest 0.245984429	passed: 23.6 sec	total: 37m 42s	remaining: 1m 34s
96:	learn 0.246565396	test 0.2459633547	bestTest 0.2459633547	passed: 23.9 sec	total: 38m 5s	remaining: 1m 10s
97:	learn 0.2465393696	test 0.2459405242	bestTest 0.2459405242	passed: 23.3 sec	total: 38m 29s	remaining: 47.1s
98:	learn 0.2465136564	test 0.2459148625	bestTest 0.2459148625	passed: 25.1 sec	total: 38m 54s	remaining: 23.6s
99:	learn 0.2464936982	test 0.2458984248	bestTest 0.2458984248	passed: 23.6 sec	total: 39m 17s	remaining: 0us

bestTest = 0.2458984248
bestIteration = 99

Shrink model to first 100 iterations.
add stats features begin ......
add stats features end ......
time lapsing 1.2455213069915771 s 

0 0.378754870385
Borders generated
0:	learn 0.6356500103	test 0.6358219057	bestTest 0.6358219057	passed: 23.4 sec	total: 34.3s	remaining: 56m 33s
1:	learn 0.5852544115	test 0.5855472049	bestTest 0.5855472049	passed: 24.4 sec	total: 58.6s	remaining: 47m 52s
2:	learn 0.541879018	test 0.5422767364	bestTest 0.5422767364	passed: 22.5 sec	total: 1m 21s	remaining: 43m 44s
3:	learn 0.5042071884	test 0.5046770832	bestTest 0.5046770832	passed: 24.3 sec	total: 1m 45s	remaining: 42m 12s
4:	learn 0.4723535471	test 0.4729482159	bestTest 0.4729482159	passed: 22.7 sec	total: 2m 8s	remaining: 40m 35s
5:	learn 0.4441739146	test 0.4448269963	bestTest 0.4448269963	passed: 23 sec	total: 2m 31s	remaining: 39m 29s
6:	learn 0.4199485174	test 0.4206589605	bestTest 0.4206589605	passed: 22.6 sec	total: 2m 53s	remaining: 38m 29s
7:	learn 0.3995584414	test 0.4003185088	bestTest 0.4003185088	passed: 21.8 sec	total: 3m 15s	remaining: 37m 29s
8:	learn 0.3813607476	test 0.3821506155	bestTest 0.3821506155	passed: 23.9 sec	total: 3m 39s	remaining: 36m 59s
9:	learn 0.3659533885	test 0.3667793952	bestTest 0.3667793952	passed: 22.1 sec	total: 4m 1s	remaining: 36m 15s
10:	learn 0.3530909231	test 0.3539386209	bestTest 0.3539386209	passed: 23.7 sec	total: 4m 25s	remaining: 35m 46s
11:	learn 0.3413129663	test 0.3421775964	bestTest 0.3421775964	passed: 23.2 sec	total: 4m 48s	remaining: 35m 16s
12:	learn 0.3306752077	test 0.3315655951	bestTest 0.3315655951	passed: 24.6 sec	total: 5m 13s	remaining: 34m 55s
13:	learn 0.3221267761	test 0.323020296	bestTest 0.323020296	passed: 22.2 sec	total: 5m 35s	remaining: 34m 20s
14:	learn 0.3143152513	test 0.3152333249	bestTest 0.3152333249	passed: 22.4 sec	total: 5m 57s	remaining: 33m 47s
15:	learn 0.3071833044	test 0.3081154496	bestTest 0.3081154496	passed: 24.4 sec	total: 6m 22s	remaining: 33m 26s
16:	learn 0.3010420364	test 0.3019810639	bestTest 0.3019810639	passed: 23.7 sec	total: 6m 45s	remaining: 33m 1s
17:	learn 0.2955847828	test 0.2965281732	bestTest 0.2965281732	passed: 22.7 sec	total: 7m 8s	remaining: 32m 32s
18:	learn 0.2906899591	test 0.2916453599	bestTest 0.2916453599	passed: 24.7 sec	total: 7m 33s	remaining: 32m 12s
19:	learn 0.2861403937	test 0.287106885	bestTest 0.287106885	passed: 24.3 sec	total: 7m 57s	remaining: 31m 50s
20:	learn 0.282409123	test 0.2833715495	bestTest 0.2833715495	passed: 24.1 sec	total: 8m 21s	remaining: 31m 27s
21:	learn 0.2792498284	test 0.2802128441	bestTest 0.2802128441	passed: 25.3 sec	total: 8m 46s	remaining: 31m 8s
22:	learn 0.2763048614	test 0.2772687211	bestTest 0.2772687211	passed: 25.4 sec	total: 9m 12s	remaining: 30m 49s
23:	learn 0.2734927157	test 0.2744657446	bestTest 0.2744657446	passed: 23.5 sec	total: 9m 35s	remaining: 30m 23s
24:	learn 0.2712492565	test 0.2722307491	bestTest 0.2722307491	passed: 25.4 sec	total: 10m 1s	remaining: 30m 3s
25:	learn 0.268967605	test 0.2699529431	bestTest 0.2699529431	passed: 25.1 sec	total: 10m 26s	remaining: 29m 42s
26:	learn 0.2670763297	test 0.2680663296	bestTest 0.2680663296	passed: 23.9 sec	total: 10m 50s	remaining: 29m 18s
27:	learn 0.2653158328	test 0.2663113301	bestTest 0.2663113301	passed: 23.1 sec	total: 11m 13s	remaining: 28m 51s
28:	learn 0.2638127983	test 0.2648124207	bestTest 0.2648124207	passed: 24.8 sec	total: 11m 38s	remaining: 28m 29s
29:	learn 0.2622699511	test 0.2632744192	bestTest 0.2632744192	passed: 24.5 sec	total: 12m 2s	remaining: 28m 6s
30:	learn 0.2610302745	test 0.2620360093	bestTest 0.2620360093	passed: 22.7 sec	total: 12m 25s	remaining: 27m 39s
31:	learn 0.2597970096	test 0.2608077024	bestTest 0.2608077024	passed: 22.6 sec	total: 12m 48s	remaining: 27m 12s
32:	learn 0.2587895745	test 0.2598072663	bestTest 0.2598072663	passed: 22.6 sec	total: 13m 10s	remaining: 26m 45s
33:	learn 0.2578670036	test 0.2588816514	bestTest 0.2588816514	passed: 22.9 sec	total: 13m 33s	remaining: 26m 19s
34:	learn 0.2569969696	test 0.258014235	bestTest 0.258014235	passed: 24 sec	total: 13m 57s	remaining: 25m 55s
35:	learn 0.2562597446	test 0.2572799077	bestTest 0.2572799077	passed: 23.8 sec	total: 14m 21s	remaining: 25m 31s
36:	learn 0.2555723011	test 0.2565949748	bestTest 0.2565949748	passed: 22.6 sec	total: 14m 43s	remaining: 25m 4s
37:	learn 0.2548453813	test 0.2558713071	bestTest 0.2558713071	passed: 24.9 sec	total: 15m 8s	remaining: 24m 42s
38:	learn 0.254225413	test 0.2552560372	bestTest 0.2552560372	passed: 22.9 sec	total: 15m 31s	remaining: 24m 17s
39:	learn 0.2536494459	test 0.2546827424	bestTest 0.2546827424	passed: 24.6 sec	total: 15m 56s	remaining: 23m 54s
40:	learn 0.2532015385	test 0.2542364516	bestTest 0.2542364516	passed: 23.7 sec	total: 16m 20s	remaining: 23m 30s
41:	learn 0.2527248185	test 0.2537620591	bestTest 0.2537620591	passed: 23.5 sec	total: 16m 43s	remaining: 23m 5s
42:	learn 0.2523466238	test 0.2533840302	bestTest 0.2533840302	passed: 23.7 sec	total: 17m 7s	remaining: 22m 41s
43:	learn 0.2519283962	test 0.2529689148	bestTest 0.2529689148	passed: 24.1 sec	total: 17m 31s	remaining: 22m 18s
44:	learn 0.2515484138	test 0.2525914023	bestTest 0.2525914023	passed: 21.7 sec	total: 17m 53s	remaining: 21m 51s
45:	learn 0.2511832685	test 0.2522255934	bestTest 0.2522255934	passed: 23.1 sec	total: 18m 16s	remaining: 21m 26s
46:	learn 0.2508777231	test 0.2519211029	bestTest 0.2519211029	passed: 21.5 sec	total: 18m 37s	remaining: 21m
47:	learn 0.2505530344	test 0.2515995629	bestTest 0.2515995629	passed: 23.3 sec	total: 19m	remaining: 20m 36s
48:	learn 0.2502603046	test 0.251309548	bestTest 0.251309548	passed: 22.2 sec	total: 19m 23s	remaining: 20m 10s
49:	learn 0.2500240016	test 0.2510774176	bestTest 0.2510774176	passed: 23.8 sec	total: 19m 46s	remaining: 19m 46s
50:	learn 0.2497736772	test 0.250827937	bestTest 0.250827937	passed: 22.2 sec	total: 20m 9s	remaining: 19m 21s
51:	learn 0.2495593206	test 0.2506127093	bestTest 0.2506127093	passed: 24.4 sec	total: 20m 33s	remaining: 18m 58s
52:	learn 0.2493635276	test 0.2504199291	bestTest 0.2504199291	passed: 23 sec	total: 20m 56s	remaining: 18m 34s
53:	learn 0.2491557589	test 0.2502155165	bestTest 0.2502155165	passed: 23.7 sec	total: 21m 20s	remaining: 18m 10s
54:	learn 0.2489596022	test 0.2500241769	bestTest 0.2500241769	passed: 23.6 sec	total: 21m 43s	remaining: 17m 46s
55:	learn 0.2488035516	test 0.2498687062	bestTest 0.2498687062	passed: 23.7 sec	total: 22m 7s	remaining: 17m 23s
56:	learn 0.2486468967	test 0.2497125682	bestTest 0.2497125682	passed: 23.4 sec	total: 22m 31s	remaining: 16m 59s
57:	learn 0.2484868898	test 0.2495549319	bestTest 0.2495549319	passed: 23.2 sec	total: 22m 54s	remaining: 16m 35s
58:	learn 0.2483494083	test 0.2494198951	bestTest 0.2494198951	passed: 23.3 sec	total: 23m 17s	remaining: 16m 11s
59:	learn 0.2482218078	test 0.249293184	bestTest 0.249293184	passed: 22.1 sec	total: 23m 39s	remaining: 15m 46s
60:	learn 0.2481187906	test 0.2491942688	bestTest 0.2491942688	passed: 23.4 sec	total: 24m 3s	remaining: 15m 22s
61:	learn 0.2480168283	test 0.2490938568	bestTest 0.2490938568	passed: 24.1 sec	total: 24m 27s	remaining: 14m 59s
62:	learn 0.2479020567	test 0.2489773494	bestTest 0.2489773494	passed: 22.8 sec	total: 24m 50s	remaining: 14m 35s
63:	learn 0.2477996823	test 0.2488783202	bestTest 0.2488783202	passed: 22.2 sec	total: 25m 12s	remaining: 14m 10s
64:	learn 0.2477226973	test 0.2488040168	bestTest 0.2488040168	passed: 23.4 sec	total: 25m 35s	remaining: 13m 46s
65:	learn 0.2476489516	test 0.2487337423	bestTest 0.2487337423	passed: 23.4 sec	total: 25m 59s	remaining: 13m 23s
66:	learn 0.2475540859	test 0.2486397916	bestTest 0.2486397916	passed: 22.8 sec	total: 26m 21s	remaining: 12m 59s
67:	learn 0.2474879393	test 0.2485757385	bestTest 0.2485757385	passed: 23.7 sec	total: 26m 45s	remaining: 12m 35s
68:	learn 0.2474189794	test 0.2485077166	bestTest 0.2485077166	passed: 22.8 sec	total: 27m 8s	remaining: 12m 11s
69:	learn 0.2473353165	test 0.2484257417	bestTest 0.2484257417	passed: 23.6 sec	total: 27m 32s	remaining: 11m 48s
70:	learn 0.2472757728	test 0.2483659132	bestTest 0.2483659132	passed: 24.1 sec	total: 27m 56s	remaining: 11m 24s
71:	learn 0.2472016456	test 0.2482946118	bestTest 0.2482946118	passed: 23.9 sec	total: 28m 20s	remaining: 11m 1s
72:	learn 0.2471334298	test 0.2482248115	bestTest 0.2482248115	passed: 23.6 sec	total: 28m 43s	remaining: 10m 37s
73:	learn 0.24708558	test 0.2481757908	bestTest 0.2481757908	passed: 24.5 sec	total: 29m 8s	remaining: 10m 14s
74:	learn 0.2470244553	test 0.2481210404	bestTest 0.2481210404	passed: 22.5 sec	total: 29m 30s	remaining: 9m 50s
75:	learn 0.2469737269	test 0.2480730427	bestTest 0.2480730427	passed: 22.4 sec	total: 29m 53s	remaining: 9m 26s
76:	learn 0.246939017	test 0.2480385371	bestTest 0.2480385371	passed: 23.4 sec	total: 30m 16s	remaining: 9m 2s
77:	learn 0.2468791787	test 0.2479808539	bestTest 0.2479808539	passed: 24.6 sec	total: 30m 40s	remaining: 8m 39s
78:	learn 0.2468233604	test 0.2479286664	bestTest 0.2479286664	passed: 25.1 sec	total: 31m 6s	remaining: 8m 16s
79:	learn 0.2467837161	test 0.2478895587	bestTest 0.2478895587	passed: 23.5 sec	total: 31m 29s	remaining: 7m 52s
80:	learn 0.2467510344	test 0.2478562084	bestTest 0.2478562084	passed: 22.8 sec	total: 31m 52s	remaining: 7m 28s
81:	learn 0.2466982079	test 0.2478044363	bestTest 0.2478044363	passed: 24.2 sec	total: 32m 16s	remaining: 7m 5s
82:	learn 0.2466555779	test 0.2477636604	bestTest 0.2477636604	passed: 23.2 sec	total: 32m 39s	remaining: 6m 41s
83:	learn 0.2466085272	test 0.2477181083	bestTest 0.2477181083	passed: 23.8 sec	total: 33m 3s	remaining: 6m 17s
84:	learn 0.2465780949	test 0.2476890898	bestTest 0.2476890898	passed: 24.6 sec	total: 33m 28s	remaining: 5m 54s
85:	learn 0.2465403467	test 0.2476518605	bestTest 0.2476518605	passed: 22.3 sec	total: 33m 50s	remaining: 5m 30s
86:	learn 0.2465160661	test 0.2476317947	bestTest 0.2476317947	passed: 24.1 sec	total: 34m 14s	remaining: 5m 7s
87:	learn 0.2464888037	test 0.2476053997	bestTest 0.2476053997	passed: 23.5 sec	total: 34m 38s	remaining: 4m 43s
88:	learn 0.2464512395	test 0.2475698535	bestTest 0.2475698535	passed: 23.8 sec	total: 35m 2s	remaining: 4m 19s
89:	learn 0.24641329	test 0.2475356257	bestTest 0.2475356257	passed: 24.8 sec	total: 35m 26s	remaining: 3m 56s
90:	learn 0.2463900585	test 0.2475181761	bestTest 0.2475181761	passed: 23.7 sec	total: 35m 50s	remaining: 3m 32s
91:	learn 0.2463534282	test 0.2474824575	bestTest 0.2474824575	passed: 23.3 sec	total: 36m 13s	remaining: 3m 9s
92:	learn 0.2463222067	test 0.2474516151	bestTest 0.2474516151	passed: 22.1 sec	total: 36m 35s	remaining: 2m 45s
93:	learn 0.2462788099	test 0.2474091504	bestTest 0.2474091504	passed: 24.1 sec	total: 36m 59s	remaining: 2m 21s
94:	learn 0.2462523944	test 0.2473874664	bestTest 0.2473874664	passed: 22.3 sec	total: 37m 22s	remaining: 1m 58s
95:	learn 0.2462281677	test 0.247366294	bestTest 0.247366294	passed: 24.3 sec	total: 37m 46s	remaining: 1m 34s
96:	learn 0.2462076462	test 0.2473461131	bestTest 0.2473461131	passed: 22.8 sec	total: 38m 9s	remaining: 1m 10s
97:	learn 0.2461735423	test 0.2473133854	bestTest 0.2473133854	passed: 23.7 sec	total: 38m 33s	remaining: 47.2s
98:	learn 0.2461552978	test 0.2472975093	bestTest 0.2472975093	passed: 23.5 sec	total: 38m 56s	remaining: 23.6s
99:	learn 0.2461311141	test 0.247272766	bestTest 0.247272766	passed: 25.2 sec	total: 39m 21s	remaining: 0us

bestTest = 0.247272766
bestIteration = 99

Shrink model to first 100 iterations.
add stats features begin ......
add stats features end ......
time lapsing 1.3006176948547363 s 

1 0.378404016658
Borders generated
0:	learn 0.6360056271	test 0.6359890545	bestTest 0.6359890545	passed: 23 sec	total: 33.7s	remaining: 55m 40s
1:	learn 0.5853482609	test 0.5853156895	bestTest 0.5853156895	passed: 23 sec	total: 56.8s	remaining: 46m 21s
2:	learn 0.5417953843	test 0.541708293	bestTest 0.541708293	passed: 23.4 sec	total: 1m 20s	remaining: 43m 13s
3:	learn 0.5051760306	test 0.5050354117	bestTest 0.5050354117	passed: 22.5 sec	total: 1m 42s	remaining: 41m 5s
4:	learn 0.4725101099	test 0.4722800699	bestTest 0.4722800699	passed: 23.4 sec	total: 2m 6s	remaining: 39m 57s
5:	learn 0.4446074027	test 0.4443874297	bestTest 0.4443874297	passed: 24.1 sec	total: 2m 30s	remaining: 39m 13s
6:	learn 0.4207710448	test 0.4205031983	bestTest 0.4205031983	passed: 23.8 sec	total: 2m 54s	remaining: 38m 32s
7:	learn 0.3997641409	test 0.3994867231	bestTest 0.3994867231	passed: 22.9 sec	total: 3m 16s	remaining: 37m 44s
8:	learn 0.3817204569	test 0.3814370237	bestTest 0.3814370237	passed: 24.8 sec	total: 3m 41s	remaining: 37m 21s
9:	learn 0.365919642	test 0.3656137891	bestTest 0.3656137891	passed: 22.7 sec	total: 4m 4s	remaining: 36m 39s
10:	learn 0.3523265938	test 0.3520072219	bestTest 0.3520072219	passed: 23.9 sec	total: 4m 28s	remaining: 36m 11s
11:	learn 0.3402621124	test 0.3399300494	bestTest 0.3399300494	passed: 22.7 sec	total: 4m 51s	remaining: 35m 34s
12:	learn 0.3307143667	test 0.3303955688	bestTest 0.3303955688	passed: 23.8 sec	total: 5m 14s	remaining: 35m 7s
13:	learn 0.3215976413	test 0.3212645233	bestTest 0.3212645233	passed: 24 sec	total: 5m 38s	remaining: 34m 41s
14:	learn 0.3134692894	test 0.313127844	bestTest 0.313127844	passed: 21.8 sec	total: 6m	remaining: 34m 4s
15:	learn 0.3068149616	test 0.3064833807	bestTest 0.3064833807	passed: 22.8 sec	total: 6m 23s	remaining: 33m 33s
16:	learn 0.3004465282	test 0.3001253125	bestTest 0.3001253125	passed: 21.9 sec	total: 6m 45s	remaining: 32m 59s
17:	learn 0.2949060151	test 0.2945758338	bestTest 0.2945758338	passed: 23.4 sec	total: 7m 8s	remaining: 32m 34s
18:	learn 0.290316758	test 0.2899885344	bestTest 0.2899885344	passed: 23.6 sec	total: 7m 32s	remaining: 32m 9s
19:	learn 0.2860926377	test 0.2857658792	bestTest 0.2857658792	passed: 24.2 sec	total: 7m 56s	remaining: 31m 46s
20:	learn 0.2824421162	test 0.2821228443	bestTest 0.2821228443	passed: 23.5 sec	total: 8m 20s	remaining: 31m 21s
21:	learn 0.2792367717	test 0.2789215289	bestTest 0.2789215289	passed: 23.2 sec	total: 8m 43s	remaining: 30m 55s
22:	learn 0.2761069567	test 0.275792049	bestTest 0.275792049	passed: 21.9 sec	total: 9m 5s	remaining: 30m 25s
23:	learn 0.2736204892	test 0.2733093631	bestTest 0.2733093631	passed: 23.8 sec	total: 9m 29s	remaining: 30m 2s
24:	learn 0.271085569	test 0.2707770446	bestTest 0.2707770446	passed: 23.3 sec	total: 9m 52s	remaining: 29m 37s
25:	learn 0.2687798645	test 0.2684684037	bestTest 0.2684684037	passed: 22.4 sec	total: 10m 14s	remaining: 29m 9s
26:	learn 0.2670747435	test 0.2667610496	bestTest 0.2667610496	passed: 23.6 sec	total: 10m 38s	remaining: 28m 45s
27:	learn 0.2653939012	test 0.2650815201	bestTest 0.2650815201	passed: 23.4 sec	total: 11m 1s	remaining: 28m 21s
28:	learn 0.2638014122	test 0.2634878584	bestTest 0.2634878584	passed: 22.7 sec	total: 11m 24s	remaining: 27m 55s
29:	learn 0.2622990163	test 0.2619847933	bestTest 0.2619847933	passed: 23 sec	total: 11m 47s	remaining: 27m 30s
30:	learn 0.2610450821	test 0.2607346131	bestTest 0.2607346131	passed: 23.4 sec	total: 12m 10s	remaining: 27m 6s
31:	learn 0.2599109313	test 0.2596130084	bestTest 0.2596130084	passed: 24 sec	total: 12m 34s	remaining: 26m 44s
32:	learn 0.2589805496	test 0.258684981	bestTest 0.258684981	passed: 24.4 sec	total: 12m 59s	remaining: 26m 22s
33:	learn 0.2580513985	test 0.2577586214	bestTest 0.2577586214	passed: 23.8 sec	total: 13m 23s	remaining: 25m 59s
34:	learn 0.2571195351	test 0.2568297257	bestTest 0.2568297257	passed: 24.3 sec	total: 13m 47s	remaining: 25m 36s
35:	learn 0.2562965702	test 0.2560095165	bestTest 0.2560095165	passed: 24.5 sec	total: 14m 12s	remaining: 25m 14s
36:	learn 0.2556749502	test 0.2553856468	bestTest 0.2553856468	passed: 23.2 sec	total: 14m 35s	remaining: 24m 50s
37:	learn 0.2550156997	test 0.254727097	bestTest 0.254727097	passed: 23.9 sec	total: 14m 59s	remaining: 24m 27s
38:	learn 0.2543630545	test 0.2540691139	bestTest 0.2540691139	passed: 22.3 sec	total: 15m 21s	remaining: 24m 1s
39:	learn 0.2538314669	test 0.2535427681	bestTest 0.2535427681	passed: 24.5 sec	total: 15m 45s	remaining: 23m 38s
40:	learn 0.2533237076	test 0.2530398749	bestTest 0.2530398749	passed: 22.4 sec	total: 16m 8s	remaining: 23m 13s
41:	learn 0.2528433225	test 0.2525645561	bestTest 0.2525645561	passed: 21.7 sec	total: 16m 30s	remaining: 22m 47s
42:	learn 0.2524439697	test 0.2521663155	bestTest 0.2521663155	passed: 24 sec	total: 16m 54s	remaining: 22m 24s
43:	learn 0.251994551	test 0.2517197815	bestTest 0.2517197815	passed: 22.8 sec	total: 17m 16s	remaining: 21m 59s
44:	learn 0.2516094372	test 0.2513381531	bestTest 0.2513381531	passed: 22.8 sec	total: 17m 39s	remaining: 21m 35s
45:	learn 0.2512660931	test 0.2509960656	bestTest 0.2509960656	passed: 22.9 sec	total: 18m 2s	remaining: 21m 10s
46:	learn 0.2509572153	test 0.2506896391	bestTest 0.2506896391	passed: 22.3 sec	total: 18m 24s	remaining: 20m 45s
47:	learn 0.2506877391	test 0.2504237465	bestTest 0.2504237465	passed: 23.4 sec	total: 18m 48s	remaining: 20m 22s
48:	learn 0.2504260946	test 0.2501656125	bestTest 0.2501656125	passed: 22.3 sec	total: 19m 10s	remaining: 19m 57s
49:	learn 0.250179793	test 0.2499200868	bestTest 0.2499200868	passed: 23.7 sec	total: 19m 34s	remaining: 19m 34s
50:	learn 0.2499410056	test 0.2496863433	bestTest 0.2496863433	passed: 23.3 sec	total: 19m 57s	remaining: 19m 10s
51:	learn 0.2497250021	test 0.249472664	bestTest 0.249472664	passed: 22.6 sec	total: 20m 20s	remaining: 18m 46s
52:	learn 0.2495705653	test 0.2493243464	bestTest 0.2493243464	passed: 23.1 sec	total: 20m 43s	remaining: 18m 22s
53:	learn 0.249386417	test 0.2491423279	bestTest 0.2491423279	passed: 22.4 sec	total: 21m 5s	remaining: 17m 58s
54:	learn 0.2492055009	test 0.2489632205	bestTest 0.2489632205	passed: 22 sec	total: 21m 27s	remaining: 17m 33s
55:	learn 0.249028222	test 0.2487902497	bestTest 0.2487902497	passed: 23.1 sec	total: 21m 50s	remaining: 17m 9s
56:	learn 0.2488864191	test 0.2486502463	bestTest 0.2486502463	passed: 21.9 sec	total: 22m 12s	remaining: 16m 45s
57:	learn 0.2487309214	test 0.248496199	bestTest 0.248496199	passed: 22.9 sec	total: 22m 35s	remaining: 16m 21s
58:	learn 0.2485969114	test 0.2483672145	bestTest 0.2483672145	passed: 22.5 sec	total: 22m 58s	remaining: 15m 57s
59:	learn 0.2484765414	test 0.2482495265	bestTest 0.2482495265	passed: 23.5 sec	total: 23m 21s	remaining: 15m 34s
60:	learn 0.2483903168	test 0.2481661412	bestTest 0.2481661412	passed: 24.8 sec	total: 23m 46s	remaining: 15m 12s
61:	learn 0.2482624925	test 0.2480392403	bestTest 0.2480392403	passed: 22.8 sec	total: 24m 9s	remaining: 14m 48s
62:	learn 0.2481579199	test 0.2479357442	bestTest 0.2479357442	passed: 25.1 sec	total: 24m 34s	remaining: 14m 25s
63:	learn 0.2480461903	test 0.2478259144	bestTest 0.2478259144	passed: 23.6 sec	total: 24m 58s	remaining: 14m 2s
64:	learn 0.2479484025	test 0.2477309223	bestTest 0.2477309223	passed: 22.3 sec	total: 25m 20s	remaining: 13m 38s
65:	learn 0.247853832	test 0.2476393185	bestTest 0.2476393185	passed: 22.6 sec	total: 25m 43s	remaining: 13m 14s
66:	learn 0.2477521949	test 0.247539215	bestTest 0.247539215	passed: 23 sec	total: 26m 5s	remaining: 12m 51s
67:	learn 0.2476795172	test 0.2474680789	bestTest 0.2474680789	passed: 23 sec	total: 26m 29s	remaining: 12m 27s
68:	learn 0.247607508	test 0.2473986012	bestTest 0.2473986012	passed: 24.3 sec	total: 26m 53s	remaining: 12m 4s
69:	learn 0.2475270867	test 0.247322599	bestTest 0.247322599	passed: 23 sec	total: 27m 16s	remaining: 11m 41s
70:	learn 0.2474567031	test 0.2472566193	bestTest 0.2472566193	passed: 23.6 sec	total: 27m 39s	remaining: 11m 17s
71:	learn 0.2474043722	test 0.2472087854	bestTest 0.2472087854	passed: 23.3 sec	total: 28m 3s	remaining: 10m 54s
72:	learn 0.2473500347	test 0.2471579105	bestTest 0.2471579105	passed: 24.3 sec	total: 28m 27s	remaining: 10m 31s
73:	learn 0.2472792003	test 0.2470873404	bestTest 0.2470873404	passed: 24 sec	total: 28m 51s	remaining: 10m 8s
74:	learn 0.2472154534	test 0.2470263993	bestTest 0.2470263993	passed: 23.9 sec	total: 29m 15s	remaining: 9m 45s
75:	learn 0.2471709883	test 0.2469847118	bestTest 0.2469847118	passed: 23.4 sec	total: 29m 38s	remaining: 9m 21s
76:	learn 0.2471159686	test 0.2469323291	bestTest 0.2469323291	passed: 23.7 sec	total: 30m 2s	remaining: 8m 58s
77:	learn 0.247076219	test 0.2468960665	bestTest 0.2468960665	passed: 22.9 sec	total: 30m 25s	remaining: 8m 34s
78:	learn 0.2470405472	test 0.2468639177	bestTest 0.2468639177	passed: 23.7 sec	total: 30m 49s	remaining: 8m 11s
79:	learn 0.2470022351	test 0.2468254139	bestTest 0.2468254139	passed: 23.9 sec	total: 31m 12s	remaining: 7m 48s
80:	learn 0.2469684655	test 0.2467951114	bestTest 0.2467951114	passed: 24.5 sec	total: 31m 37s	remaining: 7m 25s
81:	learn 0.2469304784	test 0.2467627524	bestTest 0.2467627524	passed: 24.1 sec	total: 32m 1s	remaining: 7m 1s
82:	learn 0.2468856497	test 0.2467205085	bestTest 0.2467205085	passed: 23.7 sec	total: 32m 25s	remaining: 6m 38s
83:	learn 0.2468580817	test 0.2466959138	bestTest 0.2466959138	passed: 23.9 sec	total: 32m 49s	remaining: 6m 15s
84:	learn 0.2468188887	test 0.2466586465	bestTest 0.2466586465	passed: 23.3 sec	total: 33m 12s	remaining: 5m 51s
85:	learn 0.2467807766	test 0.2466215308	bestTest 0.2466215308	passed: 23.6 sec	total: 33m 36s	remaining: 5m 28s
86:	learn 0.2467579225	test 0.2466008697	bestTest 0.2466008697	passed: 24.2 sec	total: 34m	remaining: 5m 4s
87:	learn 0.246722492	test 0.2465688988	bestTest 0.2465688988	passed: 23.7 sec	total: 34m 23s	remaining: 4m 41s
88:	learn 0.2466891732	test 0.2465382032	bestTest 0.2465382032	passed: 22.6 sec	total: 34m 46s	remaining: 4m 17s
89:	learn 0.2466582498	test 0.2465094669	bestTest 0.2465094669	passed: 23.5 sec	total: 35m 9s	remaining: 3m 54s
90:	learn 0.2466295303	test 0.2464831284	bestTest 0.2464831284	passed: 24 sec	total: 35m 34s	remaining: 3m 31s
91:	learn 0.2465940427	test 0.2464485141	bestTest 0.2464485141	passed: 22.9 sec	total: 35m 56s	remaining: 3m 7s
92:	learn 0.246570825	test 0.2464268036	bestTest 0.2464268036	passed: 23.9 sec	total: 36m 20s	remaining: 2m 44s
93:	learn 0.24654499	test 0.2464045945	bestTest 0.2464045945	passed: 23.7 sec	total: 36m 44s	remaining: 2m 20s
94:	learn 0.2465157923	test 0.2463833923	bestTest 0.2463833923	passed: 22.4 sec	total: 37m 6s	remaining: 1m 57s
95:	learn 0.2464906093	test 0.2463614805	bestTest 0.2463614805	passed: 24.1 sec	total: 37m 31s	remaining: 1m 33s
96:	learn 0.2464661791	test 0.2463418441	bestTest 0.2463418441	passed: 25.2 sec	total: 37m 56s	remaining: 1m 10s
97:	learn 0.2464440895	test 0.2463208304	bestTest 0.2463208304	passed: 23 sec	total: 38m 19s	remaining: 46.9s
98:	learn 0.2464215758	test 0.2463017064	bestTest 0.2463017064	passed: 23 sec	total: 38m 42s	remaining: 23.5s
99:	learn 0.2463986483	test 0.246282479	bestTest 0.246282479	passed: 24.2 sec	total: 39m 6s	remaining: 0us

bestTest = 0.246282479
bestIteration = 99

Shrink model to first 100 iterations.
add stats features begin ......
add stats features end ......
time lapsing 1.2814140319824219 s 

2 0.376737977174
Borders generated
0:	learn 0.6348975571	test 0.6348828027	bestTest 0.6348828027	passed: 22.8 sec	total: 33.3s	remaining: 54m 52s
1:	learn 0.5844545044	test 0.5844052616	bestTest 0.5844052616	passed: 23.6 sec	total: 56.9s	remaining: 46m 26s
2:	learn 0.5414131232	test 0.5413568671	bestTest 0.5413568671	passed: 23.6 sec	total: 1m 20s	remaining: 43m 22s
3:	learn 0.5040321197	test 0.5039820264	bestTest 0.5039820264	passed: 24.1 sec	total: 1m 44s	remaining: 41m 49s
4:	learn 0.4717487422	test 0.4716863158	bestTest 0.4716863158	passed: 22.8 sec	total: 2m 7s	remaining: 40m 19s
5:	learn 0.4443579975	test 0.4442929975	bestTest 0.4442929975	passed: 24.4 sec	total: 2m 31s	remaining: 39m 37s
6:	learn 0.4200506013	test 0.4199992253	bestTest 0.4199992253	passed: 22.6 sec	total: 2m 54s	remaining: 38m 36s
7:	learn 0.3996550295	test 0.399608053	bestTest 0.399608053	passed: 23.4 sec	total: 3m 17s	remaining: 37m 53s
8:	learn 0.3817565656	test 0.3817147764	bestTest 0.3817147764	passed: 23.4 sec	total: 3m 41s	remaining: 37m 15s
9:	learn 0.3657846098	test 0.3657623646	bestTest 0.3657623646	passed: 21.6 sec	total: 4m 2s	remaining: 36m 24s
10:	learn 0.3527704995	test 0.3527366174	bestTest 0.3527366174	passed: 23.2 sec	total: 4m 25s	remaining: 35m 51s
11:	learn 0.3407930992	test 0.3407743016	bestTest 0.3407743016	passed: 21.8 sec	total: 4m 47s	remaining: 35m 9s
12:	learn 0.3304152201	test 0.3303998619	bestTest 0.3303998619	passed: 23.9 sec	total: 5m 11s	remaining: 34m 45s
13:	learn 0.3213362353	test 0.3213316848	bestTest 0.3213316848	passed: 23.3 sec	total: 5m 34s	remaining: 34m 17s
14:	learn 0.3141458334	test 0.3141484128	bestTest 0.3141484128	passed: 22.6 sec	total: 5m 57s	remaining: 33m 46s
15:	learn 0.3070762766	test 0.3070907985	bestTest 0.3070907985	passed: 23.2 sec	total: 6m 20s	remaining: 33m 18s
16:	learn 0.3010123128	test 0.3010293211	bestTest 0.3010293211	passed: 23.5 sec	total: 6m 44s	remaining: 32m 53s
17:	learn 0.2960651676	test 0.2960756294	bestTest 0.2960756294	passed: 23.4 sec	total: 7m 7s	remaining: 32m 27s
18:	learn 0.2911829647	test 0.2911899139	bestTest 0.2911899139	passed: 23.8 sec	total: 7m 31s	remaining: 32m 4s
19:	learn 0.2865939455	test 0.2866077781	bestTest 0.2866077781	passed: 21.2 sec	total: 7m 52s	remaining: 31m 30s
20:	learn 0.2827875716	test 0.2828123746	bestTest 0.2828123746	passed: 22.2 sec	total: 8m 14s	remaining: 31m 1s
21:	learn 0.2792386913	test 0.2792763778	bestTest 0.2792763778	passed: 22.7 sec	total: 8m 37s	remaining: 30m 34s
22:	learn 0.2760205327	test 0.2760613544	bestTest 0.2760613544	passed: 22.4 sec	total: 8m 59s	remaining: 30m 7s
23:	learn 0.2732766185	test 0.2733165147	bestTest 0.2733165147	passed: 23.1 sec	total: 9m 22s	remaining: 29m 42s
24:	learn 0.2707525173	test 0.2707909528	bestTest 0.2707909528	passed: 21 sec	total: 9m 43s	remaining: 29m 11s
25:	learn 0.2689290123	test 0.2689695835	bestTest 0.2689695835	passed: 22.6 sec	total: 10m 6s	remaining: 28m 46s
26:	learn 0.2668657265	test 0.2669083342	bestTest 0.2669083342	passed: 22.8 sec	total: 10m 29s	remaining: 28m 21s
27:	learn 0.2651589625	test 0.2652057536	bestTest 0.2652057536	passed: 21.6 sec	total: 10m 51s	remaining: 27m 54s
28:	learn 0.2637544546	test 0.2638083774	bestTest 0.2638083774	passed: 22.9 sec	total: 11m 13s	remaining: 27m 29s
29:	learn 0.2623010685	test 0.2623611305	bestTest 0.2623611305	passed: 22.4 sec	total: 11m 36s	remaining: 27m 4s
30:	learn 0.2610727376	test 0.2611386374	bestTest 0.2611386374	passed: 22.1 sec	total: 11m 58s	remaining: 26m 38s
31:	learn 0.2599714118	test 0.2600415389	bestTest 0.2600415389	passed: 22.2 sec	total: 12m 20s	remaining: 26m 13s
32:	learn 0.2590141783	test 0.2590852571	bestTest 0.2590852571	passed: 22.5 sec	total: 12m 43s	remaining: 25m 49s
33:	learn 0.258169493	test 0.2582466494	bestTest 0.2582466494	passed: 22.6 sec	total: 13m 5s	remaining: 25m 25s
34:	learn 0.2573402894	test 0.2574254531	bestTest 0.2574254531	passed: 23.7 sec	total: 13m 29s	remaining: 25m 3s
35:	learn 0.2565348857	test 0.2566208813	bestTest 0.2566208813	passed: 23 sec	total: 13m 52s	remaining: 24m 39s
36:	learn 0.2558324753	test 0.255922575	bestTest 0.255922575	passed: 23.7 sec	total: 14m 16s	remaining: 24m 17s
37:	learn 0.255161165	test 0.2552548778	bestTest 0.2552548778	passed: 24 sec	total: 14m 40s	remaining: 23m 55s
38:	learn 0.2545209002	test 0.2546179749	bestTest 0.2546179749	passed: 24.6 sec	total: 15m 4s	remaining: 23m 35s
39:	learn 0.2539283272	test 0.2540237648	bestTest 0.2540237648	passed: 23.4 sec	total: 15m 28s	remaining: 23m 12s
40:	learn 0.2533801105	test 0.253482293	bestTest 0.253482293	passed: 23.5 sec	total: 15m 51s	remaining: 22m 49s
41:	learn 0.2529064793	test 0.2530105627	bestTest 0.2530105627	passed: 22.2 sec	total: 16m 13s	remaining: 22m 24s
42:	learn 0.252443369	test 0.2525467127	bestTest 0.2525467127	passed: 23.5 sec	total: 16m 37s	remaining: 22m 2s
43:	learn 0.2520410583	test 0.2521486267	bestTest 0.2521486267	passed: 21.7 sec	total: 16m 58s	remaining: 21m 36s
44:	learn 0.2516886889	test 0.2517966276	bestTest 0.2517966276	passed: 22.1 sec	total: 17m 21s	remaining: 21m 12s
45:	learn 0.2513875105	test 0.2514949347	bestTest 0.2514949347	passed: 23.7 sec	total: 17m 44s	remaining: 20m 49s
46:	learn 0.2510315339	test 0.2511427791	bestTest 0.2511427791	passed: 24.7 sec	total: 18m 9s	remaining: 20m 28s
47:	learn 0.2507202294	test 0.25083556	bestTest 0.25083556	passed: 22.9 sec	total: 18m 32s	remaining: 20m 5s
48:	learn 0.2504213804	test 0.2505396893	bestTest 0.2505396893	passed: 23.8 sec	total: 18m 56s	remaining: 19m 42s
49:	learn 0.2501584406	test 0.2502805724	bestTest 0.2502805724	passed: 22.4 sec	total: 19m 18s	remaining: 19m 18s
50:	learn 0.2499024708	test 0.2500251639	bestTest 0.2500251639	passed: 22.9 sec	total: 19m 41s	remaining: 18m 55s
51:	learn 0.2496916076	test 0.2498136235	bestTest 0.2498136235	passed: 23.1 sec	total: 20m 4s	remaining: 18m 31s
52:	learn 0.2495055584	test 0.2496340131	bestTest 0.2496340131	passed: 22.1 sec	total: 20m 26s	remaining: 18m 7s
53:	learn 0.2493307368	test 0.2494587858	bestTest 0.2494587858	passed: 21.5 sec	total: 20m 48s	remaining: 17m 43s
54:	learn 0.2491806691	test 0.2493133631	bestTest 0.2493133631	passed: 21.8 sec	total: 21m 9s	remaining: 17m 19s
55:	learn 0.2490112244	test 0.2491426755	bestTest 0.2491426755	passed: 22 sec	total: 21m 31s	remaining: 16m 55s
56:	learn 0.2488484709	test 0.2489829405	bestTest 0.2489829405	passed: 23.2 sec	total: 21m 55s	remaining: 16m 32s
57:	learn 0.2486954833	test 0.2488321525	bestTest 0.2488321525	passed: 23.8 sec	total: 22m 18s	remaining: 16m 9s
58:	learn 0.24856635	test 0.2487047858	bestTest 0.2487047858	passed: 23.7 sec	total: 22m 42s	remaining: 15m 46s
59:	learn 0.2484527697	test 0.2485937282	bestTest 0.2485937282	passed: 22.2 sec	total: 23m 4s	remaining: 15m 23s
60:	learn 0.2483270821	test 0.2484688775	bestTest 0.2484688775	passed: 23 sec	total: 23m 27s	remaining: 14m 59s
61:	learn 0.2482133573	test 0.2483562713	bestTest 0.2483562713	passed: 24.2 sec	total: 23m 51s	remaining: 14m 37s
62:	learn 0.2481166029	test 0.2482630664	bestTest 0.2482630664	passed: 23 sec	total: 24m 14s	remaining: 14m 14s
63:	learn 0.248028341	test 0.2481776791	bestTest 0.2481776791	passed: 22.4 sec	total: 24m 37s	remaining: 13m 50s
64:	learn 0.2479457058	test 0.2480987823	bestTest 0.2480987823	passed: 23.8 sec	total: 25m 1s	remaining: 13m 28s
65:	learn 0.2478596601	test 0.248014643	bestTest 0.248014643	passed: 22.1 sec	total: 25m 23s	remaining: 13m 4s
66:	learn 0.2477567326	test 0.2479136171	bestTest 0.2479136171	passed: 23.5 sec	total: 25m 46s	remaining: 12m 41s
67:	learn 0.247679815	test 0.2478407914	bestTest 0.2478407914	passed: 23 sec	total: 26m 9s	remaining: 12m 18s
68:	learn 0.2475936791	test 0.2477573978	bestTest 0.2477573978	passed: 23.6 sec	total: 26m 33s	remaining: 11m 55s
69:	learn 0.2475120594	test 0.2476783319	bestTest 0.2476783319	passed: 22.1 sec	total: 26m 55s	remaining: 11m 32s
70:	learn 0.2474551743	test 0.2476238593	bestTest 0.2476238593	passed: 24.3 sec	total: 27m 19s	remaining: 11m 9s
71:	learn 0.2473841992	test 0.2475557548	bestTest 0.2475557548	passed: 22.8 sec	total: 27m 42s	remaining: 10m 46s
72:	learn 0.2473231499	test 0.2474946714	bestTest 0.2474946714	passed: 24.6 sec	total: 28m 7s	remaining: 10m 24s
73:	learn 0.2472570794	test 0.2474280845	bestTest 0.2474280845	passed: 22.3 sec	total: 28m 29s	remaining: 10m
74:	learn 0.2471982402	test 0.2473671244	bestTest 0.2473671244	passed: 23.4 sec	total: 28m 52s	remaining: 9m 37s
75:	learn 0.2471506824	test 0.2473213566	bestTest 0.2473213566	passed: 23 sec	total: 29m 15s	remaining: 9m 14s
76:	learn 0.2470881125	test 0.2472605069	bestTest 0.2472605069	passed: 22.2 sec	total: 29m 38s	remaining: 8m 51s
77:	learn 0.2470408141	test 0.2472142406	bestTest 0.2472142406	passed: 23.7 sec	total: 30m 1s	remaining: 8m 28s
78:	learn 0.2469928274	test 0.247167412	bestTest 0.247167412	passed: 22.6 sec	total: 30m 24s	remaining: 8m 4s
79:	learn 0.2469499346	test 0.2471264175	bestTest 0.2471264175	passed: 22.3 sec	total: 30m 46s	remaining: 7m 41s
80:	learn 0.2469084231	test 0.2470867692	bestTest 0.2470867692	passed: 22.6 sec	total: 31m 9s	remaining: 7m 18s
81:	learn 0.246861166	test 0.247040534	bestTest 0.247040534	passed: 23.6 sec	total: 31m 33s	remaining: 6m 55s
82:	learn 0.2468280655	test 0.247008005	bestTest 0.247008005	passed: 23.1 sec	total: 31m 56s	remaining: 6m 32s
83:	learn 0.2468028928	test 0.2469865939	bestTest 0.2469865939	passed: 22.8 sec	total: 32m 18s	remaining: 6m 9s
84:	learn 0.2467572413	test 0.2469431129	bestTest 0.2469431129	passed: 23.9 sec	total: 32m 42s	remaining: 5m 46s
85:	learn 0.2467275958	test 0.2469170422	bestTest 0.2469170422	passed: 23 sec	total: 33m 5s	remaining: 5m 23s
86:	learn 0.246692032	test 0.2468835672	bestTest 0.2468835672	passed: 22.1 sec	total: 33m 28s	remaining: 5m
87:	learn 0.2466668958	test 0.2468594384	bestTest 0.2468594384	passed: 21.7 sec	total: 33m 49s	remaining: 4m 36s
88:	learn 0.2466435131	test 0.2468384176	bestTest 0.2468384176	passed: 24.5 sec	total: 34m 14s	remaining: 4m 13s
89:	learn 0.2466157707	test 0.2468112648	bestTest 0.2468112648	passed: 22.9 sec	total: 34m 37s	remaining: 3m 50s
90:	learn 0.2465895502	test 0.2467854374	bestTest 0.2467854374	passed: 24.2 sec	total: 35m 1s	remaining: 3m 27s
91:	learn 0.2465526257	test 0.2467508653	bestTest 0.2467508653	passed: 22.7 sec	total: 35m 23s	remaining: 3m 4s
92:	learn 0.2465319877	test 0.2467312208	bestTest 0.2467312208	passed: 24 sec	total: 35m 48s	remaining: 2m 41s
93:	learn 0.246501967	test 0.2467036475	bestTest 0.2467036475	passed: 23.4 sec	total: 36m 11s	remaining: 2m 18s
94:	learn 0.2464739032	test 0.2466758766	bestTest 0.2466758766	passed: 23.3 sec	total: 36m 34s	remaining: 1m 55s
95:	learn 0.2464522887	test 0.2466580319	bestTest 0.2466580319	passed: 23.1 sec	total: 36m 57s	remaining: 1m 32s
96:	

In [15]:
df_cv = pd.concat(df_cvfolds)
print(compare_results(df_train_gt, df_cv))


0.377750059602

In [42]:
### now run model with 100% of train set for submission

In [18]:
cb_full = catboost.CatBoostClassifier(iterations=100, 
    thread_count=8, 
    verbose=True,
    random_seed=42,
    learning_rate=0.05,
    depth=8,
    fold_permutation_block_size=64,
    calc_feature_importance=True,
    leaf_estimation_method='Gradient')

cb_full.fit(X=train[features_to_use].values, 
        y=train.reordered.values, 
        cat_features=[train[features_to_use].columns.get_loc('aisle_id')], 
        verbose=True,
        #plot=True
       )


Borders generated
0:	learn 0.6349939378passed: 32 sec	total: 44.3s	remaining: 1h 13m 5s
1:	learn 0.5848126827passed: 31.1 sec	total: 1m 15s	remaining: 1h 1m 36s
2:	learn 0.5413888139passed: 31.5 sec	total: 1m 46s	remaining: 57m 37s
3:	learn 0.5043940462passed: 33 sec	total: 2m 19s	remaining: 55m 59s
4:	learn 0.472509014passed: 33.3 sec	total: 2m 53s	remaining: 54m 52s
5:	learn 0.445319348passed: 32.5 sec	total: 3m 25s	remaining: 53m 43s
6:	learn 0.4209626024passed: 32.8 sec	total: 3m 58s	remaining: 52m 48s
7:	learn 0.3999683915passed: 31.2 sec	total: 4m 29s	remaining: 51m 41s
8:	learn 0.3820880466passed: 30.7 sec	total: 5m	remaining: 50m 37s
9:	learn 0.3664413051passed: 30.2 sec	total: 5m 30s	remaining: 49m 35s
10:	learn 0.3527427143passed: 32.7 sec	total: 6m 3s	remaining: 48m 59s
11:	learn 0.3409674792passed: 32.5 sec	total: 6m 35s	remaining: 48m 22s
12:	learn 0.3303723961passed: 33.8 sec	total: 7m 9s	remaining: 47m 54s
13:	learn 0.3213983543passed: 31.3 sec	total: 7m 40s	remaining: 47m 10s
14:	learn 0.313416383passed: 32.2 sec	total: 8m 13s	remaining: 46m 33s
15:	learn 0.306341837passed: 32 sec	total: 8m 45s	remaining: 45m 56s
16:	learn 0.3002048588passed: 30.7 sec	total: 9m 15s	remaining: 45m 12s
17:	learn 0.2954064356passed: 32.6 sec	total: 9m 48s	remaining: 44m 39s
18:	learn 0.2905509445passed: 32 sec	total: 10m 20s	remaining: 44m 4s
19:	learn 0.2867318649passed: 33.8 sec	total: 10m 53s	remaining: 43m 35s
20:	learn 0.2827323951passed: 30.7 sec	total: 11m 24s	remaining: 42m 55s
21:	learn 0.2791661146passed: 32.2 sec	total: 11m 56s	remaining: 42m 21s
22:	learn 0.2762385161passed: 32.2 sec	total: 12m 29s	remaining: 41m 47s
23:	learn 0.2735471981passed: 30.4 sec	total: 12m 59s	remaining: 41m 8s
24:	learn 0.2712684514passed: 30.6 sec	total: 13m 30s	remaining: 40m 30s
25:	learn 0.2690701744passed: 33 sec	total: 14m 3s	remaining: 39m 59s
26:	learn 0.2670885051passed: 32.9 sec	total: 14m 35s	remaining: 39m 28s
27:	learn 0.265415194passed: 30.6 sec	total: 15m 6s	remaining: 38m 51s
28:	learn 0.2638683363passed: 32 sec	total: 15m 38s	remaining: 38m 17s
29:	learn 0.2623441549passed: 31.4 sec	total: 16m 9s	remaining: 37m 43s
30:	learn 0.2611391752passed: 32.3 sec	total: 16m 42s	remaining: 37m 10s
31:	learn 0.259888988passed: 31.8 sec	total: 17m 14s	remaining: 36m 37s
32:	learn 0.258799456passed: 30.7 sec	total: 17m 44s	remaining: 36m 1s
33:	learn 0.2578656976passed: 30.5 sec	total: 18m 15s	remaining: 35m 26s
34:	learn 0.2569839985passed: 31 sec	total: 18m 46s	remaining: 34m 51s
35:	learn 0.2562685065passed: 30.4 sec	total: 19m 16s	remaining: 34m 16s
36:	learn 0.2556918519passed: 33.4 sec	total: 19m 49s	remaining: 33m 46s
37:	learn 0.2549677263passed: 32.1 sec	total: 20m 22s	remaining: 33m 13s
38:	learn 0.2543619049passed: 30.3 sec	total: 20m 52s	remaining: 32m 38s
39:	learn 0.253775662passed: 35.3 sec	total: 21m 27s	remaining: 32m 11s
40:	learn 0.2533350664passed: 31 sec	total: 21m 58s	remaining: 31m 37s
41:	learn 0.2528910391passed: 33.6 sec	total: 22m 32s	remaining: 31m 7s
42:	learn 0.2524729622passed: 31.2 sec	total: 23m 3s	remaining: 30m 33s
43:	learn 0.252097871passed: 31.1 sec	total: 23m 34s	remaining: 30m
44:	learn 0.251779612passed: 32.3 sec	total: 24m 6s	remaining: 29m 28s
45:	learn 0.2513841306passed: 33.2 sec	total: 24m 40s	remaining: 28m 57s
46:	learn 0.2510619031passed: 31.5 sec	total: 25m 11s	remaining: 28m 24s
47:	learn 0.2507338869passed: 32.4 sec	total: 25m 43s	remaining: 27m 52s
48:	learn 0.2504637481passed: 31.8 sec	total: 26m 15s	remaining: 27m 20s
49:	learn 0.2502146743passed: 30.9 sec	total: 26m 46s	remaining: 26m 46s
50:	learn 0.25000226passed: 29.9 sec	total: 27m 16s	remaining: 26m 12s
51:	learn 0.2497792969passed: 32.8 sec	total: 27m 49s	remaining: 25m 40s
52:	learn 0.2495847927passed: 33.3 sec	total: 28m 22s	remaining: 25m 9s
53:	learn 0.2494045527passed: 31.9 sec	total: 28m 54s	remaining: 24m 37s
54:	learn 0.2492128528passed: 31.6 sec	total: 29m 26s	remaining: 24m 5s
55:	learn 0.2490723377passed: 30.4 sec	total: 29m 56s	remaining: 23m 31s
56:	learn 0.2488996067passed: 31.4 sec	total: 30m 27s	remaining: 22m 58s
57:	learn 0.2487426554passed: 30.8 sec	total: 30m 58s	remaining: 22m 25s
58:	learn 0.2486080376passed: 31.6 sec	total: 31m 30s	remaining: 21m 53s
59:	learn 0.2484915492passed: 31 sec	total: 32m 1s	remaining: 21m 20s
60:	learn 0.2483603475passed: 29.7 sec	total: 32m 31s	remaining: 20m 47s
61:	learn 0.2482585133passed: 31.7 sec	total: 33m 2s	remaining: 20m 15s
62:	learn 0.2481766703passed: 32.3 sec	total: 33m 35s	remaining: 19m 43s
63:	learn 0.2480651798passed: 33.3 sec	total: 34m 8s	remaining: 19m 12s
64:	learn 0.2479568493passed: 33.4 sec	total: 34m 41s	remaining: 18m 40s
65:	learn 0.2478574015passed: 33.1 sec	total: 35m 14s	remaining: 18m 9s
66:	learn 0.2477882393passed: 31 sec	total: 35m 45s	remaining: 17m 36s
67:	learn 0.2477006481passed: 32.7 sec	total: 36m 18s	remaining: 17m 5s
68:	learn 0.2476477467passed: 32.7 sec	total: 36m 51s	remaining: 16m 33s
69:	learn 0.247585834passed: 34.1 sec	total: 37m 25s	remaining: 16m 2s
70:	learn 0.2475268909passed: 31 sec	total: 37m 56s	remaining: 15m 29s
71:	learn 0.2474763946passed: 31 sec	total: 38m 27s	remaining: 14m 57s
72:	learn 0.2474054101passed: 31.8 sec	total: 38m 59s	remaining: 14m 25s
73:	learn 0.2473323875passed: 31.9 sec	total: 39m 31s	remaining: 13m 53s
74:	learn 0.2472651029passed: 34 sec	total: 40m 5s	remaining: 13m 21s
75:	learn 0.2472192421passed: 33.6 sec	total: 40m 38s	remaining: 12m 50s
76:	learn 0.2471575679passed: 33.8 sec	total: 41m 12s	remaining: 12m 18s
77:	learn 0.2471078732passed: 33.5 sec	total: 41m 46s	remaining: 11m 46s
78:	learn 0.2470626333passed: 32.4 sec	total: 42m 18s	remaining: 11m 14s
79:	learn 0.2470010375passed: 31.1 sec	total: 42m 49s	remaining: 10m 42s
80:	learn 0.2469524947passed: 32 sec	total: 43m 21s	remaining: 10m 10s
81:	learn 0.2469060065passed: 32.2 sec	total: 43m 53s	remaining: 9m 38s
82:	learn 0.2468706061passed: 31.6 sec	total: 44m 25s	remaining: 9m 5s
83:	learn 0.2468344855passed: 32.1 sec	total: 44m 57s	remaining: 8m 33s
84:	learn 0.2467965486passed: 32 sec	total: 45m 29s	remaining: 8m 1s
85:	learn 0.2467517275passed: 32.9 sec	total: 46m 2s	remaining: 7m 29s
86:	learn 0.2467173161passed: 31.3 sec	total: 46m 33s	remaining: 6m 57s
87:	learn 0.2466859857passed: 31.3 sec	total: 47m 4s	remaining: 6m 25s
88:	learn 0.246664216passed: 33 sec	total: 47m 37s	remaining: 5m 53s
89:	learn 0.2466369141passed: 32.4 sec	total: 48m 10s	remaining: 5m 21s
90:	learn 0.246609728passed: 31.8 sec	total: 48m 42s	remaining: 4m 48s
91:	learn 0.2465880747passed: 31.9 sec	total: 49m 13s	remaining: 4m 16s
92:	learn 0.2465626362passed: 32.9 sec	total: 49m 46s	remaining: 3m 44s
93:	learn 0.2465458793passed: 33.2 sec	total: 50m 19s	remaining: 3m 12s
94:	learn 0.2465112166passed: 33.1 sec	total: 50m 53s	remaining: 2m 40s
95:	learn 0.2464928979passed: 32.6 sec	total: 51m 25s	remaining: 2m 8s
96:	learn 0.2464659106passed: 34.3 sec	total: 51m 59s	remaining: 1m 36s
97:	learn 0.2464481076passed: 34.1 sec	total: 52m 34s	remaining: 1m 4s
98:	learn 0.2464282022passed: 31.5 sec	total: 53m 5s	remaining: 32.2s
99:	learn 0.2463963558passed: 30.8 sec	total: 53m 36s	remaining: 0us
Out[18]:
<catboost.core.CatBoostClassifier at 0x7f8bad8d1400>

Prepare submission


In [20]:
testpreds = X_test[['user_id', 'product_id', 'order_id']].copy()
testpreds['reordered'] = (cb_full.predict_proba(X_test[features_to_use].values)[:,1] > .202).astype(int)
testpreds.product_id = testpreds.product_id.astype(str)

In [30]:
g = testpreds[testpreds.reordered == 1].groupby('order_id', sort=False)
df_testpreds = g[['product_id']].agg(lambda x: ' '.join(set(x)))

df_testpreds.head()


Out[30]:
product_id
order_id
2161313 10441 14715 12427 37710 11266 196 27839
1735923 12108 34690 31487 17008 2192 35123 196 15131
139487 21386 196 6184
1797124 17957 22802 196 15541
1294240 46803 13176 16797 196 26900 32478

In [34]:
# complete (but empty) test df
df_test = pd.DataFrame(index=X_test.order_id.unique())
df_test.index.name = 'order_id'
df_test['products'] = ['None'] * len(df_test)

In [35]:
# yup, there are ~3345 order_id's with no orders
len(df_test), len(df_testpreds)


Out[35]:
(75000, 71655)

In [37]:
# combine empty output df with predictions
df_test.loc[df_testpreds.index, 'products'] = df_testpreds.product_id
df_test.sort_index(inplace=True)
df_test.to_csv('preds_catboost.csv')