Анализ многомерных данных часто требует уменьшения размерности — и здесь на помощь приходит метод главных компонент (Principal Component Analysis, PCA). Хотя Excel не имеет встроенной функции для PCA, его можно успешно реализовать с помощью стандартных инструментов: матричных операций, надстройки Пакет анализа и даже Power Query. Эта статья раскроет все этапы процесса — от нормализации исходных данных до интерпретации полученных главных компонент — с практическими примерами и визуализацией.
Многие ошибочно считают, что PCA в Excel требует знания Python или R. На самом деле, с правильным подходом вы можете получить те же результаты прямо в таблицах, используя комбинацию функций МУМНОЖ(), ТРАНСП() и КОРРЕЛ(). Мы разберём не только математическую основу метода, но и типичные ошибки, которые портят результаты (например, забытая стандартизация данных или неправильное обращение с пропущенными значениями).
В этой статье вы найдёте:
- 🔹 Пошаговый алгоритм PCA в Excel с формулами и скриншотами
- 🔹 Как интерпретировать собственные значения и вектора
- 🔹 Сравнение результатов с Python (для проверки точности)
- 🔹 Практические советы по визуализации компонент в 2D/3D
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 (корреляция переменной с самой собой).
| Переменная | Доход (z) | Возраст (z) | Расходы (z) |
|---|---|---|---|
| Доход (z) | 1 | 0.82 | 0.91 |
| Возраст (z) | 0.82 | 1 | 0.78 |
| Расходы (z) | 0.91 | 0.78 | 1 |
⚠️ Внимание: Если корреляция между переменными близка к 1 или -1, это указывает на мультиколлинеарность. В таком случае PCA может дать неустойчивые результаты — рассмотрите возможность исключения одной из переменных.
3. Нахождение собственных значений и векторов
Это ядро метода PCA: разложение корреляционной матрицы на собственные значения (показывают дисперсию компонент) и собственные вектора (определяют направление компонент в пространстве исходных переменных). В Excel для этого используют матричные функции:
- Собственные значения: Используйте функцию
МОБР()для нахождения обратной матрицы, но проще воспользоваться надстройкой Matrix.xla или VBA-скриптом. Альтернатива — ручной расчёт через характеристическое уравнение (для матриц 2×2 или 3×3). - Собственные вектора: Для каждой компоненты решают систему уравнений
(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): Строят график собственных значений и ищут "излом" — точка, после которой значения почти не уменьшаются.
Пример расчёта доли дисперсии:
| Компонента | Собственное значение | Доля дисперсии (%) | Накопленная доля (%) |
|---|---|---|---|
| PC1 | 2.45 | 81.6 | 81.6 |
| PC2 | 0.50 | 16.7 | 98.3 |
| PC3 | 0.05 | 1.7 | 100.0 |
В этом примере достаточно оставить первые две компоненты, так как они объясняют 98.3% дисперсии. Третья компонента добавляет лишь шум.
5. Преобразование исходных данных в главные компоненты
Теперь, когда у нас есть собственные вектора (они формируют матрицу нагрузок), можно преобразовать исходные стандартизированные данные в новые координаты — главные компоненты. Для этого используют матричное умножение:
НовыеДанные = СтандартДанные × МатрицаНагрузок
В Excel это реализуется функцией МУМНОЖ():
- Выделите диапазон для результата (столько строк, сколько наблюдений; столбцов — сколько компонент вы оставили).
- Введите формулу как массива:
=МУМНОЖ(диапазон_стандарт_данных; диапазон_матрицы_нагрузок). - Завершите ввод комбинацией
Ctrl+Shift+Enter(в новых версиях Excel формулы массива поддерживаются автоматически).
Результирующая таблица будет содержать значения главных компонент для каждого наблюдения. Например:
| Наблюдение | PC1 | PC2 |
|---|---|---|
| 1 | -1.23 | 0.45 |
| 2 | 0.87 | -0.12 |
| 3 | 0.36 | 1.01 |
⚠️ Внимание: Если вы используете ковариационную матрицу вместо корреляционной, масштаб компонент будет зависеть от исходных единиц измерения. Это может усложнить интерпретацию.
6. Интерпретация результатов: что означают компоненты?
Главные компоненты — это новые искусственные переменные, но их можно интерпретировать через исходные. Для этого смотрят на матрицу нагрузок (собственные вектора):
- 🔍 Нагрузка > 0.7: Сильная положительная связь компоненты с переменной.
- 🔍 Нагрузка < -0.7: Сильная отрицательная связь.
- 🔍 Нагрузка близка к 0: Переменная почти не влияет на компоненту.
Пример интерпретации:
| Переменная | PC1 | PC2 |
|---|---|---|
| Доход (z) | 0.95 | 0.10 |
| Возраст (z) | 0.88 | -0.30 |
| Расходы (z) | 0.93 | 0.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.
- Интерпретация нагрузок как корреляций: Нагрузки — это косинусы углов между компонентами и исходными переменными, а не корреляции (хотя для стандартизированных данных они совпадают).
⚠️ Внимание: Если в ваших данных есть выбросы, PCA даст искажённые результаты, так как метод чувствителен к экстремальным значениям. Предварительно примените робастную стандартизацию (например, используйте медиану и MAD вместо среднего и стандартного отклонения).
FAQ: Частые вопросы по PCA в Excel
Можно ли сделать PCA в Excel без надстройки "Пакет анализа"?
Да, но это потребует ручного расчёта корреляционной матрицы (с помощью КОРРЕЛ()), а также нахождения собственных значений и векторов через матричные формулы или решение характеристического уравнения. Для матриц больше 3×3 это становится крайне трудоёмко — рекомендуем использовать Power Query или VBA.
Как визуализировать главные компоненты в 3D?
Excel не поддерживает нативные 3D-точечные диаграммы, но можно:
- Использовать
Вставка → График → Объёмная гистограммаи вручную настроить оси (не идеально). - Экспортировать данные в Python (
matplotlib) или R (plotly). - Воспользоваться надстройками для Excel, например XLSTAT или Analysis ToolPak (в некоторых версиях).
Что делать, если собственные значения отрицательные?
Отрицательные собственные значения в корреляционной матрице невозможны (они всегда неотрицательные). Если вы их получили, ошибка в:
- Расчёте корреляционной матрицы (проверьте формулы).
- Решении характеристического уравнения (возможно, ошибка в знаках).
- Использовании ковариационной матрицы без стандартизации.
Пересчитайте матрицу с нуля или используйте альтернативные методы (например, сингулярное разложение через МОБР() и МУМНОЖ()).
Как применить PCA к данным с пропусками?
Есть несколько стратегий:
- Удаление наблюдений: Исключите строки с пропусками (не рекомендуется, если данных мало).
- Имитация: Замените пропуски на среднее/медиану (риск искажения результатов).
- Парные корреляции: В Пакет анализа отметьте опцию
Парные наблюдения для корреляции. - Множественная импутация: Используйте надстройки вроде XLSTAT или Real Statistics.
Лучший вариант зависит от количества пропусков и их распределения. Для критичных задач рекомендуем методы импутации на основе модели (например, k-NN или регрессионная импутация).
Можно ли использовать PCA для прогнозирования?
PCA сам по себе не является прогнозной моделью, но его часто применяют для:
- 📍 Предобработки данных перед регрессией или классификацией (уменьшение размерности).
- 📍 Аномалийного обнаружения: наблюдения с экстремальными значениями компонент могут быть выбросами.
- 📍 Визуализации многомерных данных в 2D/3D.
Для прогнозирования на основе PCA сначала обучают модель на компонентах, а затем преобразуют новые данные в то же пространство компонент. Однако интерпретируемость такой модели снижается.