Size: a a a

2019 April 02

Аa

Андрей amber4eg in catboost_ru
Igor Petrov
Добрый день. Имеется таблица с данным где в некоторых фичах есть пусто значение. Как его правильно в CatBoost обработать? Заменить на nan или взять среднее из результатов?
У меня есть смутное воспоминание, что catboost из коробки делает mean target encoding. Но запросто могу тут ошибаться.
источник

Аa

Андрей amber4eg in catboost_ru
А нет ли в природе хорошего примера про custom metric для CatBoostRegressor? Единственное, что я нашёл - про классификатор, и адаптировать под регрессию у меня не получилось.
источник

A

Andrey in catboost_ru
Mean target - это не импутация
источник

Аa

Андрей amber4eg in catboost_ru
Andrey
Mean target - это не импутация
Блин, да :(
источник

A

Andrey in catboost_ru
Хотя можно обучить на непропущенных и применить в т.ч. к пропускам, конечно
источник

SK

Stanislav Kirillov in catboost_ru
Maxim Khrisanfov
После обновления с 12 до 13.1 при создании пула стала появляться ошибка:

KeyError                                  Traceback (most recent call last)
/usr/local/lib/python3.6/dist-packages/pandas/core/indexes/base.py in get_loc(self, key, method, tolerance)
  2656             try:
-> 2657                 return self._engine.get_loc(key)
  2658             except KeyError:

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

pandas/_libs/hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

KeyError: 0


/usr/local/lib/python3.6/dist-packages/catboost/core.py in __init__(self, data, label, cat_features, column_description, pairs, delimiter, has_header, weight, group_id, group_weight, subgroup_id, pairs_weight, baseline, feature_names, thread_count)
   289                         )
   290
--> 291                 self._init(data, label, cat_features, pairs, weight, group_id, group_weight, subgroup_id, pairs_weight, baseline, feature_names)
   292         super(Pool, self).__init__()
   293

/usr/local/lib/python3.6/dist-packages/catboost/core.py in _init(self, data, label, cat_features, pairs, weight, group_id, group_weight, subgroup_id, pairs_weight, baseline, feature_names)
   644         if feature_names is not None:
   645             self._check_feature_names(feature_names, features_count)
--> 646         self._init_pool(data, label, cat_features, pairs, weight, group_id, group_weight, subgroup_id, pairs_weight, baseline, feature_names)
   647
   648

_catboost.pyx in _catboost._PoolBase._init_pool()

_catboost.pyx in _catboost._PoolBase._init_pool()

_catboost.pyx in _catboost._PoolBase._init_features_order_layout_pool()

_catboost.pyx in _catboost._set_features_order_data_pd_data_frame()


из-за чего такое может быть?
Сделаешь минимальный пример репрезентатор и issue на github?
источник

SK

Stanislav Kirillov in catboost_ru
Сходу не ясно, возможно нулевая колонка пуста в пандам, но это на точно
источник

IP

Igor Petrov in catboost_ru
Андрей amber4eg
У меня есть смутное воспоминание, что catboost из коробки делает mean target encoding. Но запросто могу тут ошибаться.
То есть можно оставлять пустыми или NaN?
источник

Аa

Андрей amber4eg in catboost_ru
Igor Petrov
То есть можно оставлять пустыми или NaN?
Да меня уже поправили, фигню написал.
А ты не попробовал ещё? Работает ли вообще и что с метриками на отложенной выборке.
Есть рекомендации от гугла, которые мне кажутся очень верными и которые сводятся к "сделай хоть что-нибудь, а потом уже занимайся усовершенствованиями"
источник

IP

Igor Petrov in catboost_ru
Андрей amber4eg
Да меня уже поправили, фигню написал.
А ты не попробовал ещё? Работает ли вообще и что с метриками на отложенной выборке.
Есть рекомендации от гугла, которые мне кажутся очень верными и которые сводятся к "сделай хоть что-нибудь, а потом уже занимайся усовершенствованиями"
Я делаю null значения по типу. float - 0.0, int - 0, string - ''
источник

Аa

Андрей amber4eg in catboost_ru
Если у тебя в заполненных значениях встречаются нулевые, то можно пропуски ещё попробовать заполнять сильно несуществующими значениями (типа -66666666 для температуры, например), или средними.
источник

SZ

Sasha Zhu in catboost_ru
Андрей amber4eg
Если у тебя в заполненных значениях встречаются нулевые, то можно пропуски ещё попробовать заполнять сильно несуществующими значениями (типа -66666666 для температуры, например), или средними.
Ну и снова-таки, надо же понимать, когда отсутствие записи — это инфа о том, что какое-то событие не происходило, или же просто отсутствие записи
источник

Аa

Андрей amber4eg in catboost_ru
Sasha Zhu
Ну и снова-таки, надо же понимать, когда отсутствие записи — это инфа о том, что какое-то событие не происходило, или же просто отсутствие записи
Это вроде так очевидно, что внезапно.
Да, конечно, надо.
источник

SZ

Sasha Zhu in catboost_ru
Например, если взять ту же апиху от какого-нибудь фудтрекера, и если в какой-то из дней нет инфы о том, что человек пил воду может быть сигналом о том, что он забыл ее залоггировать, или действительно не пил. Это тупой до ужаса пример, но я когда-то на нем попалась
источник

Аa

Андрей amber4eg in catboost_ru
Отличный пример
источник

SZ

Sasha Zhu in catboost_ru
Андрей amber4eg
Это вроде так очевидно, что внезапно.
Да, конечно, надо.
Вот я ниже написала, что, казалось бы, очевидно — но в голове держать стоит тоже
источник

Аa

Андрей amber4eg in catboost_ru
да-да, абсолютно согласен
источник

SZ

Sasha Zhu in catboost_ru
:)
источник

AR

Alexander Rogachev in catboost_ru
Андрей amber4eg
Да меня уже поправили, фигню написал.
А ты не попробовал ещё? Работает ли вообще и что с метриками на отложенной выборке.
Есть рекомендации от гугла, которые мне кажутся очень верными и которые сводятся к "сделай хоть что-нибудь, а потом уже занимайся усовершенствованиями"
То есть, все же, пропуски в чистом виде обрабатывать не умеет и нужна предобработка данных? (заполнение этих пропусков)
источник

AD

Anna Veronika Dorogush in catboost_ru
Пропуски можно оставлять пропусками, не обязательно заполнять нанами
источник