У меня есть некоторые функции, которые имеют нулевые центрированные значения и должны представлять изменение между текущим значением и предыдущим значением. Вообще говоря, я считаю, что между этими ценностями должна быть некоторая симметрия. То есть. количество положительных значений должно быть примерно таким же, как и отрицательных значений, и примерно эти значения должны работать в том же масштабе.
Когда я пытаюсь масштабировать свои образцы с помощью MaxAbsScaler, я замечаю, что мои отрицательные значения для этой функции почти полностью заглушаются положительными значениями. И у меня нет никаких оснований полагать, что мои положительные значения должны быть намного больше, чем мои отрицательные значения.
Итак, что я заметил, так это то, что величина значений процентного изменения не является симметричной по масштабу. Например, если у меня есть значение от 50 до 200, это приведет к изменению на 300,0%. Если у меня есть значение от 200 до 50, это приведет к изменению на -75,0%. Я понимаю, что есть причина для этого, но с точки зрения моей функции, я не вижу причины, по которой изменение от 50 до 100 должно быть в 3 раза более «важным», чем то же изменение в значении, но в противоположном направлении.
Учитывая эту информацию, я не верю, что была бы какая-либо причина, чтобы моя модель воспринимала изменение 200-50 как "меньшее" изменение, чем изменение 50-200. Поскольку я пытаюсь представить изменение значения во времени, я хочу абстрагировать этот шаблон, чтобы моя модель могла «визуализировать» изменение значения во времени так же, как это сделал бы человек.
Сейчас я решаю эту проблему, используя эту формулу
if curr > prev:
return curr / prev - 1
else:
return (prev / curr - 1) * -1
И это, похоже, относится к изменениям стоимости, аналогично, независимо от направления. Т.е. из приведенного выше примера 50> 200 = 300, 200> 50 = -300. Есть ли причина, почему я не должен делать это? Это достигает моей цели? Кто-нибудь сталкивался с подобными дилеммами?