Перейти к содержимому

Python phik coefficient как использовать

  • автор:

Как создать корреляционную матрицу в Python

Чем дальше коэффициент корреляции от нуля, тем сильнее связь между двумя переменными.

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

В этом руководстве объясняется, как создать и интерпретировать корреляционную матрицу в Python.

Как создать матрицу корреляции в Python

Выполните следующие шаги, чтобы создать матрицу корреляции в Python.

Шаг 1. Создайте набор данных

import pandas as pd data = df = pd.DataFrame(data, columns=['assists','rebounds','points']) df # assist rebounds points #0 4 12 22 #1 5 14 24 #2 5 13 26 #3 6 7 26 #4 7 8 29 #5 8 8 32 #6 8 9 20 #7 10 13 14

Шаг 2. Создайте матрицу корреляции

#создать корреляционную матрицу df.corr() assists rebounds points assists 1.000000 -0.244861 -0.329573 rebounds -0.244861 1.000000 -0.522092 points -0.329573 -0.522092 1.000000 #создайте ту же матрицу корреляции с коэффициентами, округленными до 3 знаков после запятой df.corr().round(3) assists rebounds points assists 1.000 -0.245 -0.330 rebounds -0.245 1.000 -0.522 points -0.330 -0.522 1.000

Шаг 3. Интерпретация матрицы корреляции

Все коэффициенты корреляции по диагонали таблицы равны 1, потому что каждая переменная совершенна коррелирует сам с собой.

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

  • Коэффициент корреляции между передачами и подборами равен -0.245
  • Коэффициент корреляции между передачами и очками равен -0.330 .
  • Коэффициент корреляции между подборами и очками равен -0.522

Шаг 4. Визуализируйте матрицу корреляции (необязательно)

Вы можете визуализировать матрицу корреляции с помощью параметры стиля доступны в pandas:

corr = df.corr() corr.style.background_gradient(cmap='coolwarm')

Correlation matrix in Python

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

corr = df.corr() corr.style.background_gradient(cmap='RdYlGn') 

Correlation matrix with matplotlib in Python

corr = df.corr() corr.style.background_gradient(cmap='bwr')

Correlation matrix using Pandas

Примечание: Полный список аргументов cmap см. в документация по matplotlib.

How to calculate Pearson, Spearman and Phik correlation between variables using Python

A comparison on the use of different methods that are commonly used to calculate correlation and why we should consider measuring all 3 of them in our data analyses.

Published in
4 min read
Jan 16, 2022

Pairwise comparisons between data variables are commonly used for data analysts. The association between variables is typically measured by the Pearson’s correlation coefficient, which is the measure of strength of the linear relationship between two variables. While useful in most cases, the Pearson’s correlation can fail to capture relationships that are non-linear, or in datasets which have many outliers.

To better capture non-linear relationships and reduce effects from outliers, the Seaborn library allows users to calculate correlations using the Spearman correlation. Instead of calculating correlations by using the numerical raw values, the Spearman method calculates correlations based on rank, where points are ranked in ascending order. The correlation value is high when both variables increase or decrease together.

Finally, we have the Phik (φK) correlation, which is recently developed and has been demonstrated to capture non-linear dependencies efficiently. Phik correlation is obtained by inverting the chi-square contingency test statistics, thereby allowing users to also analyse correlation between numerical, categorical, interval and ordinal variables. For more details on the mathematics involved, readers can read the research article here. From the figure below, you can also quickly appreciate that Phik correlation can detect correlations that would otherwise be missed if you had only analysed using Pearson’s correlation.

Fortunately, these correlations can be easily calculated using the Python programming language. First, we import the required packages (You can use the pip install command if you do not have any of these packages:

import numpy as np
import pandas as pd
import phik
import seaborn as sns
from phik import…

Phi_K Correlation Analyzer Library¶

Phi_K is a new and practical correlation coefficient based on several refinements to Pearson’s hypothesis test of independence of two variables.

The combined features of Phi_K form an advantage over existing coefficients. First, it works consistently between categorical, ordinal and interval variables. Second, it captures non-linear dependency. Third, it reverts to the Pearson correlation coefficient in case of a bi-variate normal input distribution. These are useful features when studying the correlation matrix of variables with mixed types.

The presented algorithms are easy to use and available through this public Python library: the correlation analyzer package. Emphasis is paid to the proper evaluation of statistical significance of correlations and to the interpretation of variable relationships in a contingency table, in particular in case of low statistics samples.

For example, the Phi_K correlation analyzer package has been used to study surveys, insurance claims, correlograms, etc. For details on the methodology behind the calculations, please see our publication.

Documentation¶

The entire Phi_K documentation including tutorials can be found at read-the-docs. See the tutorials for detailed examples on how to run the code with pandas. We also have one example on how calculate the Phi_K correlation matrix for a spark dataframe.

Check it out¶

The Phi_K library requires Python 3 and is pip friendly. To get started, simply do:

$ pip install phik

or check out the code from out GitHub repository:

$ git clone https://github.com/KaveIO/PhiK.git $ pip install -e PhiK/

where in this example the code is installed in edit mode (option -e).

You can now use the package in Python with:

import phik 

Congratulations, you are now ready to use the PhiK correlation analyzer library!

Quick run¶

As a quick example, you can do:

import pandas as pd import phik from phik import resources, report # open fake car insurance data df = pd.read_csv( resources.fixture('fake_insurance_data.csv.gz') ) df.head() # Pearson's correlation matrix between numeric variables (pandas functionality) df.corr() # get the phi_k correlation matrix between all variables df.phik_matrix() # get global correlations based on phi_k correlation matrix df.global_phik() # get the significance matrix (expressed as one-sided Z) # of the hypothesis test of each variable-pair dependency df.significance_matrix() # contingency table of two columns cols = ['mileage','car_size'] df[cols].hist2d() # normalized residuals of contingency test applied to cols df[cols].outlier_significance_matrix() # show the normalized residuals of each variable-pair df.outlier_significance_matrices() # generate a phik correlation report and save as test.pdf report.correlation_report(df, pdf_file_name='test.pdf') 

For all available examples, please see the tutorials at read-the-docs.

Contact and support¶

  • Issues & Ideas: https://github.com/kaveio/phik/issues
  • Q&A Support: contact us at: kave [at] kpmg [dot] com

Please note that KPMG provides support only on a best-effort basis.

Contents¶

  • Why did we build this?
  • Tutorials
  • Publication & Talks
    • Publication
    • Talks
    • References
    • Working on the package
    • Contributing
    • Tips and Tricks

    Передовой способ вычисления взаимосвязи с библиотекой phik

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

    Суть метода базируется на подсчете хи-квадрат статистики , затем ее трансформации в нечто подобное коэффициенту корреляции только на отрезке от 0 (нулевая взаимосвязь) до 1 (максимальная взаимосвязь). С этой целью разработчики считают аналогичную хи-квадрат статистику для различных значений корреляции p случайных величин из двумерного нормального распределения. Опуская нюансы, возвращается p двумерного распределения, соответствующее найденной хи-квадрат статистике между заданными признаками.

    Для нахождения хи-квадрат статистики двумерного распределения значения разбиваются на площади, где для каждой находится совместная вероятность путем интегрирования плотности распределения:

    Затем статистику хи-квадрат для заданного коэффициента взаимосвязи считают так:

    Эта формула аналогична определению хи-квадрат статистики, о которой я рассказывал ранее (сумме квадратов разности между наблюдаемым и ожидаемым количеством точек в заданной области, деленных на ожидаемое количество в заданной области). То есть функция (2) позволяет по p найти хи-квадрат для двумерного нормального распределения.

    Еще нам понадобится способ отображения (2) на диапазон значений хи-квадрат величин для исследуемых переменных. Этот способ базируется на статистической оценке минимальных и максимальных хи-квадрат значений, исходя из характеристик распределения — параметров таблицы совместной встречаемости, количестве исследуемых точек (N). В результате устанавливается следующее соответствие:

    Для потенциальных хи-квадрат исследуемых переменных меньше оцененного минимума считаем p=0, остальные значения возрастают вплоть до посчитанного максимума (с увеличением p до 1):

    Имея функцию (2), мы можем найти такое значение p, при котором масштабированная к заданному диапазону (3), становится равной наблюдаемому значению. Эта задача решается путем нахождения корня на отрезке от 0 до 1 для функции:

    Резюмируя, алгоритм подсчета p=phi_k следующий:

    • Непрерывные признаки разбиваются на n равных отрезков (по умолчанию n=10);
    • Составляется таблица совместной встречаемости признаков и считаются ее показатели — хи-квадрат статистика, степени свободы, параметры таблицы;
    • Решается задача нахождения p двумерного нормального распределения на отрезке от 0 до 1, для которого масштабированная величина хи-квадрат (3) совпадает с полученной на предыдущем шаге. Результат принимается равным phi_k .

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

    import numpy as np import pandas as pd np.random.seed(0) autos_l = ['BMW', 'Mercedes', 'VOLGA', 'GEEP'] locations_l = ['Russia', 'Germany', 'USA'] prob_d = <'BMW':[0.2, 0.7, 0.1], 'Mercedes':[0.15, 0.75, 0.10], 'VOLGA':[0.99, 0.01,0], 'GEEP':[0.1, 0.3, 0.6]>N=1000 autos = np.random.choice(autos_l, size=N) locations = [np.random.choice(a=locations_l, p=prob_d[it]) for it in autos] df = pd.DataFrame() costs_d = pd.DataFrame([('GEEP', 'Russia', 10), ('GEEP', 'Germany', 25), ('GEEP', 'USA', 20), ('BMW', 'Russia', 20), ('BMW', 'Germany', 20), ('BMW', 'USA', 30), ('Mercedes', 'Russia', 25), ('Mercedes', 'Germany', 25), ('Mercedes', 'USA', 35), ('VOLGA', 'Russia', 5), ('VOLGA', 'Germany', 7), ('VOLGA', 'USA', 10)], columns=['auto', 'location', 'cost'])\ .set_index(['auto', 'location'])['cost'].to_dict() df['cost'] = df.apply(lambda x: tuple(x), axis=1).map(costs_d) df.head(3)

    Коэффициенты взаимосвязи считаются путем вызова метода phik_matrix:

    import phik df.phik_matrix()

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

    Непрерывные признаки разбиваются по бинам (по умолчанию на 10 равномерных частей). Однако это можно регулировать с аргументами interval_cols, в котором задается список колонок, и словаря bins, задающего для колонки число бинов или список границ:

    df.phik_matrix(interval_cols=['cost'], bins=)

    С методом hist2d можно построить таблицу совместной встречаемости, на базе которой считается хи-квадрат статистика и коэффициент phi_k для пары признаков:

    Для сверки ее аналог можно получить вручную так:

    df['cost_str'] = pd.cut(df['cost'], 5, labels=[1,2,3,4,5], ordered=False).astype(str) df.groupby(['auto', 'cost_str']).size().unstack().fillna(0)

    Для демонстрации качества нового подхода выведем коэффициент корреляции Пирсона между действительной переменной и ее квадратом, а также значение зависимости, устанавливаемое phik:

    N = 1000 ar = np.random.randint(-100, 100, N) display(pd.DataFrame().corr()) (pd.DataFrame().phik_matrix())

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

    1. Теория по phik ;
    2. Сайт библиотеки ;
    3. Блокнот с демонстрацией работы ;
    4. Репозиторий phik ;
    5. Определение взаимосвязи между категориальными величинами с хи-квадрат тестом ;
    6. Корреляция Спирмена ;
    7. Пример подсчета корреляции Пирсона вручную ;
    8. Опасность применения корреляции Пирсона с данными, имеющими псевдоупорядоченность ;
    9. Пример, когда корреляции Пирсона не работает .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *