Catboost - zajímavosti

Vypichuji jen to, co mi přišlo zajímavé

Použití jako standalone aplikace

https://catboost.ai/en/docs/concepts/cli-installation

Předtrénovaná data

https://catboost.ai/en/docs/features/proceed-training - umožňuje například začít učení lineární regresí a lesy doučit jen na jejích chybách

Feature importance jsou tři

Catboost se liší v tom, kterou feature importance defaultně spočítá, v závislosti na typu loss funkce. Při regresi používá PredictionValueChange, při rankingu používá LossFunctionChange. Je to dost matoucí, protože na první pohled v artefaktech nepoznám, co je to vlastně za feature importance.

PredictionValueChange

Normální feature importance pro regresi (tedy PredictionValueChange) je normalizovaná na 100. Počítá se tak, že se z lesa odebírají stromy obsahující featuru a výslednému lesu se spočítá, jak moc se změnily výsledné hodnoty příkladů.

https://catboost.ai/en/docs/concepts/fstr#regular-feature-importance

LossFunctionChange

https://catboost.ai/en/docs/concepts/fstr#regular-feature-importances__lossfunctionchange

U rankingu se jako defaultní feature importance počítá LossFunctionChange. Počítá se tak, že se z hotového lesa odebírají stromy obsahující featuru a výslednému zbylému lesu se změří loss funkce. U featury, u které se po odebrání jejích stromů zhorší loss funkce, ukazuje kladnou hodnotu (protože feature je důležitá a bez ní by se to zhoršilo). Naopak se může stát, že u featur, jejichž odebrání by loss funkci zbytkového lesa zlepšilo, vyjde feature importnace záporná! Ve skutečnosti to neznamená, že je správné takovou zápornou featuru odstranit i z učení - já ty záporné hodnoty interpretuji jako pseudonáhodné artefakty. Z toho také plyne, že u takové feature importance nedává smysl normalizovat ji na 100.

Proč jsou pro různé loss funkce různé feature importance

Protože navzájem nedávají smysl. U řazení nedává smysl zjišťovat, jak se změnily výsledné hodnoty jednotlivých příkladů, protože se neví, jak to ovlivní pořadí. Naopak u jednoduché regrese není definována skutečná metrika (typicky NDCG), takže není jak počítat změnu této loss funkce. Teoreticky si dokážu představit, že by se u loss funkce NDCG spočítaly obě feature importance, ale nikdy jsem to neviděl fungovat.

Při interpretaci Feature Importanc je prostě potřeba koukat, co se přesně spočítalo. Catboost to totiž nikde nepíše, nutno odvozovat od použité loss funkce. Nebo dojet až na konec výpisu a když jsou tam záporná čísla, tak jde o LossFunctionChange, když tam jsou nuly, je to PredictionValueChange.

Internal Feature Importance

Třetí možná feature Importance, kterou má Catboost implementovanou, ale automaticky se nepočítá. Počítá se z jednotlivých uzlů, ve kterých je featura použitá (tedy ne mazáním celých stromů jako ostatní dvě feature importance). V uzlu, kde je featura používána, se provede výpočet, který mi připomná information gain - je tím vyšší, čím víc se liší hodnoty příkladů v listech (nebo podstromech). Je teoreticky hodně podobný naší staré výživnosti signálů v RC ranku.

Shap values úplně nerozumím

https://catboost.ai/en/docs/concepts/shap-values a příklad beeswarms MLflow (scif.cz) - příklad běhu - už neběží

Feature analysis charts

https://catboost.ai/en/docs/concepts/feature-analysis-graph

Nečíselné featury - zmínka

https://catboost.ai/en/docs/features/categorical-features kategorické

https://catboost.ai/en/docs/features/text-features textové - výpočet: https://catboost.ai/en/docs/concepts/algorithm-main-stages_text-to-numeric

https://catboost.ai/en/docs/features/embeddings-features embedingové - jen pro jednorozměrné klasifikace. Přes Linear Discriminant Analysis

Metriky

Spousta vzorečků. Je dobré začít přehledem písmenek. https://catboost.ai/en/docs/concepts/loss-functions-variables-used

Metriky pro ranking https://catboost.ai/en/docs/concepts/loss-functions-ranking#usage-information

Politika růstu stromů

https://catboost.ai/en/docs/concepts/parameter-tuning#tree-growing-policy - umožňuje asymetrické - blbé na vybavování

https://catboost.ai/en/docs/concepts/parameter-tuning#rand-str - přidání náhody

Random forest

https://catboost.ai/en/docs/concepts/speed-up-training#rsm

Feature weights

https://catboost.ai/en/docs/references/training-parameters/common#feature_weights - bude diskriminována při výběru, ale nakonec se prosadí, jenom jinak

https://catboost.ai/en/docs/references/training-parameters/common#first_feature_use_penalties - penalizace prvního výskytu - vhodné, když chceme odstraňovat featury