GeoBrain

GeoBrain 

О чем думает, пишет и прогает геоаналитик

41subscribers

43posts

Showcase

15
goals1
$14.04 of $281 raised
Поддержать развитие этого блога

Они одинаковые, но все же они отличаются

Это короткий, но надеюсь полезный пост.
Иногда так случается, что вы строите модель на выборке, скажем, в Московской области, она показывает там очень хорошие результаты, даже на кроссвалидации, а потом вы решаете применить модель в Ленинградской области, и она разваливается.
Проблема в том, что какие-то из выбранных для модели факторов сильно отличаются в разных регионов. И для начала важно понять - какие. По-просту говоря, необходимо сравнить одни и те же показатели в разных выборках.
Предположим, что надо сравнить зарплаты в Московской и Ленинградской областях. Конечно, можно посмотреть на средние : например, 50 и 40 тыс; Но, как мы поймем много ли это 10 тыс разницы и что вызывает эту разницу: стабильно более низкие зарплаты в Ленинградской области или одна супер высокая зарплата в Москве?
Ответ: нужно смотреть на распределения. Причем не исходные, а стандартизированные: по ним можно будет сразу понять место второй выборки относительно первой и принять решение, насколько смещение существенно
В Python уже есть для этого готовые классы и хранятся они в библиотеке sklearn.
Как это работает? Так же как с обучением модели: обучаете объект-трансформер на одной выборке, а затем применяете к двум. Тем самым будет понятно, где зарплаты Ленинградской область находится в масштабах Московских
Способы стандартизации данных
1️⃣ StandardScaler
🔹 Когда? Если данные распределены примерно нормально и нет выбросов
🔹 Что делает? Меняет значения на стандартные отклонения(std), тем самым позволяя увидеть значительные отличия и выбросы ( за пределами 2 std) 
🔹 Как влияет? Сохраняет форму распределения, но меняет масштаб.
2️⃣RobustScaler
🔹 Когда? Если данные распределены примерно нормально, но есть выбросы.
🔹 Что делает? Масштабирует данные по медиане и IQR (интерквартильному размаху).
🔹 Как влияет? Сглаживает выбросы, но сохраняет порядок значений.
3️⃣QuantileTransformer 
🔹 Когда? Если хотя бы один из датасетов имеет не нормальное распределение
🔹 Что делает? Преобразует распределение в гауссовское (нормальное) заменяя исходные значения на квантили
🔹 Как влияет? Меняет саму форму распределения.
4️⃣ MinMaxScaler (наименее полезный для нашей задачи)
🔹 Когда? Если данные имеют разные диапазоны значений и нужно привести их к одному масштабу, чтобы сравнить форму распределений
🔹 Что делает? Приводит данные к диапазону [0,1].
🔹 Как влияет? Масштабирует без изменения формы распределения
Пример
Вот, например, сравнение одной и той же метрики в 2 датасетах с помощью QuantileTransformer, обученном на 1-ом датасете. На графике я сразу вижу, что большое количество значений 2-ого датасета попадают в 10ый квантиль (x=5), а среднее сдвинута с 5-ого на 7. 
Код
Код на github для сравнения и визуализации фичей: https://github.com/Ines2607/all_geodata_scripts/blob/main/features_comparison_scalers.py
Go up