Ожидается, что подготовка данных составит 80% усилий в проектах AI и ML. Это значение в основном связано с необходимостью очистки данных, но есть также действия, связанные с нормализацией данных, которые занимают значительное время, особенно до тех пор, пока не будет найден правильный подход.

Как и во многих других аспектах науки о данных, результат с точки зрения объема кода невелик, поскольку мы имеем дело с более точными, хорошо написанными компактными алгоритмами, а не с большими программными задачами.

Одним из действий, часто встречающихся при обработке финансовых данных, является нормализация различных задействованных временных рядов. Например, цены должны быть нормализованы как по разным активам, так и в некоторых случаях по количеству разрешенных шагов.

Последний процесс называется квантованием, дискретизацией или биннингом, и он широко известен в таких областях, как электротехника и обработка сигналов данных, что позволяет обрабатывать дискретные значения из действительных чисел. В случае науки о данных это то, что позволяет нам уменьшить количество дискретных значений в нашем наборе данных. Это не совсем квантование, потому что входной ряд не является непрерывным по своей природе, например, в электрической области, но для практических целей его можно рассматривать как таковой.

Равномерный квантизатор

Хотя существует несколько способов дискретизации или квантования сигнала, классическим является равномерный квантователь. Формула выглядит следующим образом:

Given:
x :
a real number to be quantized
delta : 
the quantization step, i.e. the bin size in which we want to divide the continuous value space
Q(x) :
the quantized value for x
Q(x) = delta * floor((x+delta/2)/delta)

Определение функции квантования C99

Примечание. Атрибут inline предлагает компилятору заменить функцию встроенным кодом, что позволяет сэкономить накладные расходы на вызов функции. Запрос может быть удовлетворен или нет, и gcc, и clang позволяют использовать атрибут always_inline для обеспечения встроенного использования. Этот метод можно использовать для улучшения структуры кода в тех местах, где требуется скорость, как это часто бывает с подпрограммами Data Science.

Полный пример по ряду данных

Будет дискретизировать входные значения до 0.05 шагов значения. В первом столбце показаны входные значения из командной строки. Во втором столбце показан результат с использованием функции quantize, а в третьем столбце показан результат с использованием функции quantize_mid.

Вывод

Применение квантователей к ряду данных — простая операция. Это требуется, если каждое значение ряда данных будет применяться в качестве кумулятивного ввода (например, применение агрегированных значений) к нейронной сети. С помощью этого процесса мы эффективно уменьшаем количество входов нейронных сетей. Эта операция интуитивно понятна при обработке изображений, где разрешение может быть снижено, чтобы уменьшить требуемую вычислительную нагрузку, но такая же необходимость возникает и для других наборов данных науки о данных, где сами значения применяются в качестве входных данных для последующего процесса.