Найти в Дзене
Postgres DBA

Стандартизация данных с помощью z-score в PostgreSQL

Для каждого значения в столбце: z = (x - μ) / σ где: Для стандартизации двух столбцов (например, col1 и col2) в таблице my_table: WITH stats AS ( SELECT AVG(col1) as avg1, STDDEV(col1) as std1, AVG(col2) as avg2, STDDEV(col2) as std2 FROM my_table WHERE col1 IS NOT NULL AND col2 IS NOT NULL ) SELECT id, col1, col2, -- Стандартизация col1 (col1 - avg1) / std1 as col1_z, -- Стандартизация col2 (col2 - avg2) / std2 as col2_z FROM my_table, stats; После стандартизации можно рассчитать угол наклона: WITH stats AS ( SELECT AVG(col1) as avg1, STDDEV(col1) as std1, AVG(col2) as avg2, STDDEV(col2) as std2 FROM my_table ), standardized_data AS ( SELECT (col1 - avg1) / std1 as col1_z, (col2 - avg2) / std2 as col2_z FROM my_table, stats ) SELECT REGR_SLOPE(col2_z, col1_z) as slope, ATAN(REGR_SLOPE(col2_z, col1_z)) * 180 / PI() as slope_angle_degrees, REGR_R2(col2_z, col1_z) as r_squared FROM standardized_data; Таким образом, стандартизация с помощью z-score позволяет получить более корректные и ин
Оглавление
Стандартизация - ключ к порядку. Особенно когда вопрос касается цифр.
Стандартизация - ключ к порядку. Особенно когда вопрос касается цифр.

📊 Стандартизация данных с помощью z-score

1. Основная формула z-score

Для каждого значения в столбце:

z = (x - μ) / σ

где:

  • x - исходное значение
  • μ - среднее значение столбца
  • σ - стандартное отклонение столбца

2. Практическая реализация в PostgreSQL

Для стандартизации двух столбцов (например, col1 и col2) в таблице my_table:

WITH stats AS (
SELECT
AVG(col1) as avg1,
STDDEV(col1) as std1,
AVG(col2) as avg2,
STDDEV(col2) as std2
FROM my_table
WHERE col1 IS NOT NULL AND col2 IS NOT NULL
)
SELECT
id,
col1,
col2,
-- Стандартизация col1
(col1 - avg1) / std1 as col1_z,
-- Стандартизация col2
(col2 - avg2) / std2 as col2_z
FROM my_table, stats;

3. Расчет регрессии на стандартизированных данных

После стандартизации можно рассчитать угол наклона:

WITH stats AS (
SELECT
AVG(col1) as avg1,
STDDEV(col1) as std1,
AVG(col2) as avg2,
STDDEV(col2) as std2
FROM my_table
),
standardized_data AS (
SELECT
(col1 - avg1) / std1 as col1_z,
(col2 - avg2) / std2 as col2_z
FROM my_table, stats
)
SELECT
REGR_SLOPE(col2_z, col1_z) as slope,
ATAN(REGR_SLOPE(col2_z, col1_z)) * 180 / PI() as slope_angle_degrees,
REGR_R2(col2_z, col1_z) as r_squared
FROM standardized_data;

💡 Преимущества стандартизации:

  1. Сравнимость коэффициентов: После стандартизации коэффициенты регрессии можно напрямую сравнивать между собой
  2. Устранение влияния масштаба: Решается проблема разных единиц измерения переменных
  3. Улучшенная интерпретация: Угол наклона будет отражать реальную силу связи, а не артефакты масштабирования

📈 Интерпретация результатов после стандартизации:

  • Наклон (slope): Показывает, на сколько стандартных отклонений изменится col2_z при изменении col1_z на одно стандартное отклонение
  • Угол наклона: Будет находиться в более интерпретируемом диапазоне (обычно между -45° и 45°)
  • : Коэффициент детерминации не изменится после стандартизации

⚠️ Важные замечания:

  1. Перед стандартизацией убедитесь, что в данных нет NULL-значений
  2. Стандартизация не меняет форму распределения данных, только масштаб
  3. Для очень маленьких выборок (менее 30 наблюдений)необходимо использовать t-поправку

Таким образом, стандартизация с помощью z-score позволяет получить более корректные и интерпретируемые значения угла наклона линии регрессии в PostgreSQL.