Диаграмма рассеяния с регрессией

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

В основе любой диаграммы рассеяния лежит отображение набора точек, где каждая точка соответствует наблюдению из набора данных. Координаты определяются двумя полями:

  • числовая переменная по оси X
  • числовая переменная по оси Y

Базовая спецификация Vega-Lite строится вокруг ключевых блоков:

  • data — источник данных
  • mark — тип графического примитива (точка, линия и т.д.)
  • encoding — правила отображения данных на визуальные каналы

Простейшая диаграмма рассеяния:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "data": {
    "values": [
      {"x": 1, "y": 2},
      {"x": 2, "y": 3},
      {"x": 3, "y": 5},
      {"x": 4, "y": 4}
    ]
  },
  "mark": "point",
  "encoding": {
    "x": {"field": "x", "type": "quantitative"},
    "y": {"field": "y", "type": "quantitative"}
  }
}

Каждая точка в этой модели является независимым наблюдением, а визуальная структура позволяет выявлять корреляции, кластеры и выбросы.

Добавление регрессионной линии

Регрессия в Vega-Lite реализуется через трансформацию данных regression, которая вычисляет аппроксимацию зависимости между переменными. Наиболее распространённый вариант — линейная регрессия.

Технически процесс включает:

  • вычисление коэффициентов модели
  • генерацию набора точек для линии
  • отрисовку результата поверх исходных данных
{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "data": {
    "values": [
      {"x": 1, "y": 2},
      {"x": 2, "y": 3},
      {"x": 3, "y": 5},
      {"x": 4, "y": 4},
      {"x": 5, "y": 6}
    ]
  },
  "layer": [
    {
      "mark": "point",
      "encoding": {
        "x": {"field": "x", "type": "quantitative"},
        "y": {"field": "y", "type": "quantitative"}
      }
    },
    {
      "transform": [
        {
          "regression": "y",
          "on": "x"
        }
      ],
      "mark": {
        "type": "line",
        "color": "red"
      },
      "encoding": {
        "x": {"field": "x", "type": "quantitative"},
        "y": {"field": "y", "type": "quantitative"}
      }
    }
  ]
}

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

Принцип работы трансформации regression

Трансформация регрессии в Vega-Lite формирует модель зависимости вида:

genui{“math_block_widget_always_prefetch_v2”:{“content”:“y = ax + b”}}

где:

  • a — коэффициент наклона (slope)
  • b — свободный член (intercept)

Алгоритм внутри Vega-Lite автоматически вычисляет параметры методом наименьших квадратов, минимизируя сумму квадратов отклонений между наблюдаемыми и предсказанными значениями.

Множественная регрессия по группам

При наличии категориального признака регрессионная модель может быть построена отдельно для каждой группы. Это достигается использованием groupby.

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "data": {
    "values": [
      {"x": 1, "y": 2, "group": "A"},
      {"x": 2, "y": 3, "group": "A"},
      {"x": 3, "y": 4, "group": "A"},
      {"x": 1, "y": 5, "group": "B"},
      {"x": 2, "y": 6, "group": "B"},
      {"x": 3, "y": 7, "group": "B"}
    ]
  },
  "layer": [
    {
      "mark": "point",
      "encoding": {
        "x": {"field": "x", "type": "quantitative"},
        "y": {"field": "y", "type": "quantitative"},
        "color": {"field": "group", "type": "nominal"}
      }
    },
    {
      "transform": [
        {
          "regression": "y",
          "on": "x",
          "groupby": ["group"]
        }
      ],
      "mark": "line",
      "encoding": {
        "x": {"field": "x", "type": "quantitative"},
        "y": {"field": "y", "type": "quantitative"},
        "color": {"field": "group", "type": "nominal"}
      }
    }
  ]
}

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

Нелинейная регрессия

Vega-Lite поддерживает различные типы регрессионных моделей через параметр method. Помимо линейной модели доступны:

  • полиномиальная аппроксимация
  • логарифмическая регрессия
  • экспоненциальная модель

Пример полиномиальной регрессии:

{
  "transform": [
    {
      "regression": "y",
      "on": "x",
      "method": "poly",
      "order": 3
    }
  ]
}

Полиномиальная модель расширяет базовую форму уравнения:

genui{“math_block_widget_always_prefetch_v2”:{“content”:“y = a_3 x^3 + a_2 x^2 + a_1 x + a_0”}}

Такая форма позволяет описывать более сложные зависимости, включая изгибы и точки перегиба.

Масштабирование и влияние шкал

При построении диаграммы рассеяния с регрессией важную роль играет тип шкал осей. В Vega-Lite используются следующие типы масштабирования:

  • linear — линейное
  • log — логарифмическое
  • sqrt — корневое
  • time — временное

Логарифмическое преобразование особенно полезно при экспоненциальных зависимостях:

"x": {"field": "x", "type": "quantitative", "scale": {"type": "log"}}

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

Сглаживание и альтернативные методы аппроксимации

Помимо классической регрессии, Vega-Lite поддерживает сглаживание с помощью LOESS-подобных методов через loess.

{
  "transform": [
    {
      "loess": "y",
      "on": "x"
    }
  ]
}

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

Совмещение нескольких моделей

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

"layer": [
  {
    "transform": [{"regression": "y", "on": "x"}],
    "mark": "line",
    "encoding": {"color": {"value": "red"}}
  },
  {
    "transform": [{"loess": "y", "on": "x"}],
    "mark": "line",
    "encoding": {"color": {"value": "blue"}}
  }
]

Такая структура позволяет оценивать расхождения между глобальной линейной моделью и локально сглаженной функцией.

Плотность точек и визуальные артефакты

При увеличении объёма данных диаграмма рассеяния может терять информативность из-за наложения точек. Для решения используются:

  • прозрачность (opacity)
  • джиттеринг (случайное смещение)
  • агрегация (binning)

Пример настройки прозрачности:

"mark": {
  "type": "point",
  "opacity": 0.5
}

Регрессионная линия при этом сохраняет устойчивость, так как вычисляется на исходных данных, а не на визуальном представлении.

Интерполяция регрессионной линии

Vega-Lite автоматически интерполирует точки регрессии для построения гладкой линии. Количество промежуточных точек определяется внутренними параметрами трансформации, что позволяет избегать дискретности отображения.

При необходимости можно контролировать визуальную гладкость через сортировку и плотность исходного диапазона x.

Поведение при выбросах

Регрессионные модели в Vega-Lite чувствительны к экстремальным значениям. Наличие выбросов может существенно изменять наклон линии, особенно в линейной модели.

Практически это проявляется в:

  • смещении коэффициента наклона
  • увеличении ошибки аппроксимации
  • визуальном искажении тренда

Для минимизации влияния выбросов используется предварительная фильтрация или альтернативные робастные методы, реализуемые на уровне подготовки данных до передачи в Vega-Lite.

Архитектурная модель Vega при построении регрессии

Система Vega опирается на декларативный pipeline обработки данных:

  • загрузка источника
  • последовательные трансформации
  • масштабирование
  • отрисовка mark-ов

Регрессия является частью этапа трансформации и не зависит от визуального слоя. Это позволяет:

  • повторно использовать вычисленные модели
  • комбинировать несколько визуализаций на одном наборе данных
  • отделять аналитику от представления

Такая архитектура обеспечивает предсказуемость результата и упрощает масштабирование визуализаций при росте объёма данных.