Перепост из stats stackexchange
Допустим, у меня есть утилита протоколирования в моем приложении, которую я использую для записи диагностических сообщений журнала с временной меткой. Я хочу добавить отслеживание некоторых показателей производительности в этот журнал. Более того, я хочу сделать это разумно, чтобы не увеличивать размер лог-файлов.
Удобным способом сжатия с потерями является запись значений только тогда, когда кажется, что происходит что-то "интересное" - например, если посмотреть на выход фильтра высоких частот, примененного к значению.
Очевидно, что успех такой реализации в решающей степени зависит от конструкции фильтра. Как мы можем спроектировать оптимальный фильтр (в смысле искажения скорости), учитывая некоторые знания (например, структуру момента) потока, который мы пытаемся сжать?
Отсутствие сохранения потока ограничивает алгоритмы, которые вы можете использовать. Пакетные алгоритмы, использующие многопроходный подход, не могут быть использованы, поскольку им нужны данные, которых уже нет.
Но есть и однопроходные, которые могут работать с потоком и вычислять на лету, например, алгоритм The Welford's, позволяющий вычислять дисперсию и стандартное отклонение. Определите метрики, которые стоит поддерживать, и вы можете запускать логирование при обнаружении аномальных выбросов.