13 March 2015

Визуальная линейная аппроксимация с помощью Gnuplot

Data MiningData visualization
Sandbox
Говорят, что нелинейная аппроксимация — это искусство, но и с обычной линейной дело, бывает, обстоит не просто.

image

Многие, наверно, помнят, что самый простой и довольно точный метод построения прямых МНК — это «прозрачной линейкой на глазок». Раньше, когда считали на калькуляторах, этот метод позволял экономить многие часы монотонных вычислений, но сейчас для заведомо линейных процессов это уже не актуально, аппроксимацию умеет мгновенно считать и рисовать даже Excel.

Однако при решении реальных задач часто приходится иметь дело с процессами, у которых модель неизвестна. В таких случаях бывает разумно строить кусочно-линейные аппроксимации. И вот тут, когда точных критериев построения просто не существует — метод «прозрачной линейки», основанный на «искусстве аппроксимации» (по простому — чуйке), опять становится актуальным.

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

В качестве примера «жизненных» данных с неизвестной моделью рассмотрим динамику по времени индекса массы тела (BMI) девушек месяца журнала Playboy. Задача состоит в том, чтобы уловить в динамике общие тенденции.

Исходные данные взяты из статьи Вадима Маркова (@BubaVV) "«Корреляции для начинающих»". Ссылка на файлы для построения картинок в Gnuplot будет дана ниже. Небольшое замечание по данным: по смыслу данных по оси X откладывается время (месяцы), но чтобы не усложнять задачу будем использовать не время, а просто порядковый номер записи.

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

image

С линейной аппроксимацией явно что-то не в порядке, похоже, что в процессе тренд менялся. Построим квадратичную аппроксимация, которая позволяет поймать смену угла наклона прямых линий.

image

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

image

Точки в левой области будем аппроксимировать одной прямой, а в правой другой. Заодно и по оси Х вместо абстрактных цифр поставим метки времени, нам не нужно много подробностей, отметим несколько лет.

image

Теперь, по крайней мере на вид, аппроксимация прямыми достаточно хорошая, значения параметров линий можно взять из log-файла, который пишет Gnuplot в процессе аппроксимации.

Резюме. Ничего не вычисляя, а только разглядывая графики и рисуя линии, мы определили основные тренды динамики модели. Кстати, интересно, что произошло в районе 1985 года, что в моду стали входить девушки с более высоким BMI?

PS. Все данные и файлы для построения картинок в Gnuplot можно скачать по ссылке: drive.google.com/file/d/0BwHQSqFOG-7lU1BfbkdqTTFxdkU/view?usp=sharing

PPS. Ради интереса — так будет выглядеть аппроксимация полиномом 4-й степени. Судя по графику, имеет смысл посмотреть, не появляется ли опять в моде тенденция на более худых моделей.

image
Tags:линейная регрессияgnuplotанализ данных
Hubs: Data Mining Data visualization
+16
14.3k 58
Comments 25
Popular right now
Курс по аналитике данных
December 7, 202064,200 ₽SkillFactory
Data Analyst
December 8, 2020102,000 ₽SkillFactory
Python для анализа данных
December 9, 202024,900 ₽SkillFactory
Профессия Data Scientist
December 9, 2020162,000 ₽SkillFactory
Специализация Data Science
December 9, 2020114,000 ₽SkillFactory