Cara menghitung jarak mahalanobis dengan python


Jarak Mahalanobis adalah jarak antara dua titik dalam ruang multivariat. Ini sering digunakan untuk mendeteksi outlier dalam analisis statistik yang melibatkan banyak variabel.

Tutorial ini menjelaskan cara menghitung jarak Mahalanobis dengan Python.

Contoh: Jarak Mahalanobis dengan Python

Gunakan langkah-langkah berikut untuk menghitung jarak Mahalanobis untuk setiap observasi dalam kumpulan data dengan Python.

Langkah 1: Buat kumpulan data.

Pertama, kita akan membuat kumpulan data yang menampilkan nilai ujian dari 20 siswa, beserta jumlah jam yang mereka habiskan untuk belajar, jumlah ujian praktik yang mereka ambil, dan nilai mata pelajaran mereka saat ini:

 import numpy as np
import pandas as pd
import scipy as stats

data = {'score': [91, 93, 72, 87, 86, 73, 68, 87, 78, 99, 95, 76, 84, 96, 76, 80, 83, 84, 73, 74],
        'hours': [16, 6, 3, 1, 2, 3, 2, 5, 2, 5, 2, 3, 4, 3, 3, 3, 4, 3, 4, 4],
        'prep': [3, 4, 0, 3, 4, 0, 1, 2, 1, 2, 3, 3, 3, 2, 2, 2, 3, 3, 2, 2],
        'grade': [70, 88, 80, 83, 88, 84, 78, 94, 90, 93, 89, 82, 95, 94, 81, 93, 93, 90, 89, 89]
        }

df = pd.DataFrame(data,columns=['score', 'hours', 'prep','grade'])
df.head()

 score hours prep grade
0 91 16 3 70
1 93 6 4 88
2 72 3 0 80
3 87 1 3 83
4 86 2 4 88

Langkah 2: Hitung jarak Mahalanobis untuk setiap observasi.

Selanjutnya kita akan menulis fungsi singkat untuk menghitung jarak Mahalanobis.

 #create function to calculate Mahalanobis distance
def mahalanobis(x= None , data= None , cov= None ):

    x_mu = x - np.mean(data)
    if not cov:
        cov = np.cov(data.values.T)
    inv_covmat = np.linalg.inv(cov)
    left = np.dot(x_mu, inv_covmat)
    mahal = np.dot(left, x_mu.T)
    return mahal.diagonal()

#create new column in dataframe that contains Mahalanobis distance for each row
df['mahalanobis'] = mahalanobis(x=df, data=df[['score', 'hours', 'prep', 'grade']])

#display first five rows of dataframe
df.head()

 score hours prep grade mahalanobis
0 91 16 3 70 16.501963
1 93 6 4 88 2.639286
2 72 3 0 80 4.850797
3 87 1 3 83 5.201261
4 86 2 4 88 3.828734

Langkah 3: Hitung nilai p untuk setiap jarak Mahalanobis.

Kita dapat melihat bahwa beberapa jarak Mahalanobis jauh lebih besar dibandingkan jarak Mahalanobis lainnya. Untuk menentukan apakah ada jarak yang signifikan secara statistik, kita perlu menghitung nilai p-nya.

Nilai p untuk setiap jarak dihitung sebagai nilai p yang sesuai dengan statistik chi-kuadrat jarak Mahalanobis dengan k-1 derajat kebebasan, dimana k = jumlah variabel. Jadi dalam hal ini kita akan menggunakan derajat kebebasan 4-1 = 3.

 from scipy.stats import chi2

#calculate p-value for each mahalanobis distance 
df['p'] = 1 - chi2.cdf(df['mahalanobis'], 3)

#display p-values for first five rows in dataframe
df.head()

 score hours prep grade mahalanobis p
0 91 16 3 70 16.501963 0.000895
1 93 6 4 88 2.639286 0.450644
2 72 3 0 80 4.850797 0.183054
3 87 1 3 83 5.201261 0.157639
4 86 2 4 88 3.828734 0.280562

Umumnya, nilai p kurang dari 0,001 dianggap outlier. Terlihat bahwa observasi pertama merupakan outlier pada dataset karena memiliki p-value kurang dari 0,001.

Bergantung pada konteks masalahnya, Anda mungkin memutuskan untuk menghapus observasi ini dari kumpulan data karena observasi ini merupakan outlier dan dapat memengaruhi hasil analisis.

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *