Метод главных компонент (PCA) в Excel: полное руководство с примерами

Анализ многомерных данных часто требует уменьшения размерности — и здесь на помощь приходит метод главных компонент (Principal Component Analysis, PCA). Хотя Excel не имеет встроенной функции для PCA, его можно успешно реализовать с помощью стандартных инструментов: матричных операций, надстройки Пакет анализа и даже Power Query. Эта статья раскроет все этапы процесса — от нормализации исходных данных до интерпретации полученных главных компонент — с практическими примерами и визуализацией.

Многие ошибочно считают, что PCA в Excel требует знания Python или R. На самом деле, с правильным подходом вы можете получить те же результаты прямо в таблицах, используя комбинацию функций МУМНОЖ(), ТРАНСП() и КОРРЕЛ(). Мы разберём не только математическую основу метода, но и типичные ошибки, которые портят результаты (например, забытая стандартизация данных или неправильное обращение с пропущенными значениями).

В этой статье вы найдёте:

  • 🔹 Пошаговый алгоритм PCA в Excel с формулами и скриншотами
  • 🔹 Как интерпретировать собственные значения и вектора
  • 🔹 Сравнение результатов с Python (для проверки точности)
  • 🔹 Практические советы по визуализации компонент в 2D/3D
📊 Какой инструмент вы обычно используете для анализа данных?
Excel
Python (Pandas/Scikit-learn)
R
SPSS
Другой

1. Подготовка данных: почему это критично для PCA

Перед применением метода главных компонент данные необходимо стандартизировать — привести к единому масштабу с нулевым средним и единичным стандартным отклонением. Это обязательный шаг, так как PCA чувствителен к разбросу переменных: если одна колонка имеет значения от 0 до 1000, а другая — от 0 до 1, первая доминирует в анализе, искажая результаты.

В Excel стандартизацию выполняют с помощью формулы:

= (X - СРЗНАЧ(диапазон)) / СТАНДОТКЛОН.В(диапазон)

Где X — текущее значение ячейки. Например, для ячейки B2 с данными в диапазоне B2:B100 формула будет:

= (B2 - СРЗНАЧ($B$2:$B$100)) / СТАНДОТКЛОН.В($B$2:$B$100)

⚠️ Внимание: Если в данных есть пропущенные значения (#Н/Д), используйте СТАНДОТКЛОН.ВЫБ() вместо СТАНДОТКЛОН.В(), чтобы избежать ошибок. Также проверьте данные на выбросы — PCA чувствителен к аномальным значениям.

  • 📌 Что делать с категориальными переменными? PCA работает только с числовыми данными. Преобразуйте категории в dummy-переменные (0/1) или используйте другие методы (например, MCA для категориальных данных).
  • 📌 Минимальный размер выборки: Для надёжных результатов должно быть не менее 5–10 наблюдений на каждую переменную.
Пример данных для PCA

Исходная таблица может выглядеть так:

| Наблюдение | Переменная 1 (доход) | Переменная 2 (возраст) | Переменная 3 (расходы) |

|------------|-----------------------|-------------------------|-------------------------|

| 1 | 50000 | 35 | 12000 |

| 2 | 75000 | 42 | 18000 |

...

После стандартизации значения преобразуются в безразмерные величины (z-оценки).

2. Вычисление ковариационной или корреляционной матрицы

Следующий шаг — построение матрицы, которая описывает взаимосвязи между переменными. В PCA используют:

  • 🔢 Ковариационную матрицу — если переменные измерены в одних единицах и не стандартизированы (редкий случай).
  • 🔢 Корреляционную матрицу — если данные стандартизированы (рекомендуемый вариант).

В Excel корреляционную матрицу строят с помощью функции КОРРЕЛ() или инструмента Пакет анализа:

  1. Перейдите в Данные → Анализ данных → Корреляция.
  2. Укажите диапазон стандартизированных данных (без заголовков!).
  3. Отметьте опцию Метки в первой строке, если они есть.
  4. Выберите выходной диапазон для результата.

Результирующая матрица будет симметричной (значения выше и ниже диагонали дублируются), а на диагонали всегда 1 (корреляция переменной с самой собой).

ПеременнаяДоход (z)Возраст (z)Расходы (z)
Доход (z)10.820.91
Возраст (z)0.8210.78
Расходы (z)0.910.781

⚠️ Внимание: Если корреляция между переменными близка к 1 или -1, это указывает на мультиколлинеарность. В таком случае PCA может дать неустойчивые результаты — рассмотрите возможность исключения одной из переменных.

3. Нахождение собственных значений и векторов

Это ядро метода PCA: разложение корреляционной матрицы на собственные значения (показывают дисперсию компонент) и собственные вектора (определяют направление компонент в пространстве исходных переменных). В Excel для этого используют матричные функции:

  1. Собственные значения: Используйте функцию МОБР() для нахождения обратной матрицы, но проще воспользоваться надстройкой Matrix.xla или VBA-скриптом. Альтернатива — ручной расчёт через характеристическое уравнение (для матриц 2×2 или 3×3).
  2. Собственные вектора: Для каждой компоненты решают систему уравнений (A - λI)v = 0, где A — корреляционная матрица, λ — собственное значение, I — единичная матрица.

Пример для матрицы 2×2:


=МУМНОЖ(МОБР(МУМНОЖ(КоррМатрица; ЕДИНИЧНАЯ(2)) - λ*ЕДИНИЧНАЯ(2)); КоррМатрица)

На практике проще использовать Power Query или Python для этого этапа, но если вам нужны формулы Excel, вот упрощённый подход для 3 переменных:

Вычислите след матрицы (сумма диагональных элементов) — он равен сумме всех собственных значений.|

Найдите определитель матрицы — он равен произведению собственных значений.|

Для матрицы 3×3 используйте формулу кубического уравнения (кардано).|

Проверьте, что сумма собственных значений равна количеству переменных (для корреляционной матрицы).-->

Критическая деталь: собственные вектора должны быть нормализованы (их длина равна 1). В Excel это делают с помощью формулы деления каждого элемента вектора на его евклидову норму (корень из суммы квадратов элементов).

4. Отбор главных компонент: сколько оставить?

После получения собственных значений нужно решить, сколько компонент сохранить. Критериев несколько:

  • 📊 Доля объяснённой дисперсии: Суммируйте собственные значения и рассчитайте процент дисперсии для каждой компоненты. Обычно оставляют компоненты, которые вместе объясняют 70–90% дисперсии.
  • 📉 Критерий Кайзера: Оставляйте компоненты с собственными значениями > 1 (только для корреляционной матрицы!).
  • 📈 Скрее-плот (Scree Plot): Строят график собственных значений и ищут "излом" — точка, после которой значения почти не уменьшаются.

Пример расчёта доли дисперсии:

КомпонентаСобственное значениеДоля дисперсии (%)Накопленная доля (%)
PC12.4581.681.6
PC20.5016.798.3
PC30.051.7100.0

В этом примере достаточно оставить первые две компоненты, так как они объясняют 98.3% дисперсии. Третья компонента добавляет лишь шум.

5. Преобразование исходных данных в главные компоненты

Теперь, когда у нас есть собственные вектора (они формируют матрицу нагрузок), можно преобразовать исходные стандартизированные данные в новые координаты — главные компоненты. Для этого используют матричное умножение:


НовыеДанные = СтандартДанные × МатрицаНагрузок

В Excel это реализуется функцией МУМНОЖ():

  1. Выделите диапазон для результата (столько строк, сколько наблюдений; столбцов — сколько компонент вы оставили).
  2. Введите формулу как массива: =МУМНОЖ(диапазон_стандарт_данных; диапазон_матрицы_нагрузок).
  3. Завершите ввод комбинацией Ctrl+Shift+Enter (в новых версиях Excel формулы массива поддерживаются автоматически).

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

НаблюдениеPC1PC2
1-1.230.45
20.87-0.12
30.361.01

⚠️ Внимание: Если вы используете ковариационную матрицу вместо корреляционной, масштаб компонент будет зависеть от исходных единиц измерения. Это может усложнить интерпретацию.

6. Интерпретация результатов: что означают компоненты?

Главные компоненты — это новые искусственные переменные, но их можно интерпретировать через исходные. Для этого смотрят на матрицу нагрузок (собственные вектора):

  • 🔍 Нагрузка > 0.7: Сильная положительная связь компоненты с переменной.
  • 🔍 Нагрузка < -0.7: Сильная отрицательная связь.
  • 🔍 Нагрузка близка к 0: Переменная почти не влияет на компоненту.

Пример интерпретации:

ПеременнаяPC1PC2
Доход (z)0.950.10
Возраст (z)0.88-0.30
Расходы (z)0.930.20

Здесь PC1 можно назвать "уровнем благосостояния" (все переменные сильно положительно коррелируют), а PC2 — "возрастным фактором" (слабая отрицательная нагрузка по возрасту).

Для визуализации используйте Вставка → Диаграмма → Точечная, где по осям отложены значения PC1 и PC2. Это поможет выявить кластеры или выбросы:

7. Проверка результатов: сравнение с Python

Чтобы убедиться в корректности расчётов в Excel, сравните результаты с Scikit-learn (Python). Вот пример кода для проверки:


from sklearn.decomposition import PCA

import pandas as pd

Загрузите данные (те же, что в Excel)

data = pd.read_excel("data.xlsx")

X = data.values

Стандартизация

X_std = (X - X.mean(axis=0)) / X.std(axis=0)

PCA

pca = PCA()

pca.fit(X_std)

print("Собственные значения:", pca.explained_variance_)

print("Матрица нагрузок:\n", pca.components_.T)

Разница в результатах не должна превышать 1e-6 (погрешность вычислений). Если расхождения значительные, проверьте:

  • 🔎 Правильность стандартизации данных в Excel.
  • 🔎 Корректность расчёта корреляционной матрицы (особенно если есть пропущенные значения).
  • 🔎 Нормализацию собственных векторов.

8. Типичные ошибки и как их избежать

Даже опытные аналитики допускают ошибки при проведении PCA в Excel. Вот самые распространённые:

  1. Пропущенная стандартизация: Если не привести данные к одному масштабу, переменные с большим разбросом доминируют в анализе.
  2. Игнорирование пропущенных значений: Функции КОРРЕЛ() и СТАНДОТКЛОН() по-разному обрабатывают #Н/Д. Используйте АГРЕГАТ() для гибкой обработки.
  3. Неправильный отбор компонент: Слепое следование критерию Кайзера может привести к потере важной информации, если собственные значения близки к 1.
  4. Интерпретация нагрузок как корреляций: Нагрузки — это косинусы углов между компонентами и исходными переменными, а не корреляции (хотя для стандартизированных данных они совпадают).

⚠️ Внимание: Если в ваших данных есть выбросы, PCA даст искажённые результаты, так как метод чувствителен к экстремальным значениям. Предварительно примените робастную стандартизацию (например, используйте медиану и MAD вместо среднего и стандартного отклонения).

FAQ: Частые вопросы по PCA в Excel

Можно ли сделать PCA в Excel без надстройки "Пакет анализа"?

Да, но это потребует ручного расчёта корреляционной матрицы (с помощью КОРРЕЛ()), а также нахождения собственных значений и векторов через матричные формулы или решение характеристического уравнения. Для матриц больше 3×3 это становится крайне трудоёмко — рекомендуем использовать Power Query или VBA.

Как визуализировать главные компоненты в 3D?

Excel не поддерживает нативные 3D-точечные диаграммы, но можно:

  1. Использовать Вставка → График → Объёмная гистограмма и вручную настроить оси (не идеально).
  2. Экспортировать данные в Python (matplotlib) или R (plotly).
  3. Воспользоваться надстройками для Excel, например XLSTAT или Analysis ToolPak (в некоторых версиях).
Что делать, если собственные значения отрицательные?

Отрицательные собственные значения в корреляционной матрице невозможны (они всегда неотрицательные). Если вы их получили, ошибка в:

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

Пересчитайте матрицу с нуля или используйте альтернативные методы (например, сингулярное разложение через МОБР() и МУМНОЖ()).

Как применить PCA к данным с пропусками?

Есть несколько стратегий:

  1. Удаление наблюдений: Исключите строки с пропусками (не рекомендуется, если данных мало).
  2. Имитация: Замените пропуски на среднее/медиану (риск искажения результатов).
  3. Парные корреляции: В Пакет анализа отметьте опцию Парные наблюдения для корреляции.
  4. Множественная импутация: Используйте надстройки вроде XLSTAT или Real Statistics.

Лучший вариант зависит от количества пропусков и их распределения. Для критичных задач рекомендуем методы импутации на основе модели (например, k-NN или регрессионная импутация).

Можно ли использовать PCA для прогнозирования?

PCA сам по себе не является прогнозной моделью, но его часто применяют для:

  • 📍 Предобработки данных перед регрессией или классификацией (уменьшение размерности).
  • 📍 Аномалийного обнаружения: наблюдения с экстремальными значениями компонент могут быть выбросами.
  • 📍 Визуализации многомерных данных в 2D/3D.

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