Что делать с масштабом временных рядов
Хочу рассказать про один способ отображения временных рядов (time series — графиков, где ось абсцисс — время).
Например, есть такой график:
Представим, что нам нужно отслеживать состояние какой-то сложной системы со многими параметрами: загрузкой ЦПУ, сетью, трафиком и чем-то ещё. В этом случае графики должны помогать нам:
- замечать выбросы, отличающиеся от нормального поведения системы: какая-то аномальная загрузка ЦП в датацентре Амстердама, большой исходящий трафик в Сингапуре;
- отмечать какие-то паттерны: в датацентрах какая-то периодическая дисковая активность в середине дня;
- видеть при этом каждый из параметров: здесь наблюдается плавный рост, а потом резкое падение — сработало масштабирование нагрузки, а во втором случае рост был быстрый, системы масштабирования не успели отреагировать;
- сравнивать параметры между собой: серверы в Сингапуре почти всегда загружены, а в Европе простаивают, не дотягивают и трети сингапурских;
Чтобы сравнить много графиков, проще всего сложить их в стопку (иногда накладывают их друг на друга на одной оси, но так делать не надо). Чтобы все они влезли, нам придется изменить вертикальный масштаб:
Если графиков будет много, то получится нечитаемая каша:
Масштаб графиков по высоте стал совсем плохой: попробуйте заметить здесь те самые выбросы и отклонения и проследите взаимосвязи между параметрами. Невозможно, да.
Сейчас я немного изменю график, чтобы показать, как можно компенсировать эти проблемы.
Исходный график:
Сначала поделим наш график по оси ординат на несколько групп:
Потом раскрасим их по возрастанию значения:
И сложим их одну на другую:
Весь процесс (гифка):
И как раз такие графики можно снова сложить стопкой:
Такой график отлично показывает наличие пиков и нулей: пики — яркие, нули — пустоты. Кроме этого он не портит вертикальный масштаб: не сжимает его и не растягивает.
Оптимальный вертикальный масштаб графика, Илья Бирман
И с нашими ожиданиями от графика стало все лучше, вот с этими:
- замечать выбросы, отличающиеся от нормального поведения системы,
- отмечать какие-то паттерны,
- видеть при этом каждый из параметров,
- сравнивать параметры между собой.
Ещё раз было-стало:
Программировать с нуля такую штуку не придется: компания Square, делающая терминалы для приема оплаты с банковских карт, разработала библиотеку для такой визуализации.
Ссылки по теме:
- Time on the Horizon, Stephen Few и Perceptual Edge, PDF Оригинальная статья, по которой я писал пост
- Мы решили объединить эти значения в один график Совет бюро, в котором рассказывается почему не надо накладывать графики друг на друга
- Color Brewer Специальный инструмент для составления цветовых шкал
- Оптимальный вертикальный масштаб графика, Илья Бирман