Korelasi dengan variabel kategori python

Dalam kedua kasus tersebut, kekuatan korelasi antar variabel dapat diukur menggunakan uji ANOVA. ANOVA adalah singkatan dari Analysis Of Variance. Sebenarnya, tes ini mengukur apakah ada perbedaan yang signifikan antara rata-rata nilai variabel numerik untuk setiap nilai kategorikal. Ini adalah sesuatu yang dapat Anda visualisasikan menggunakan plot kotak juga

Hipotesis nol (H0) Uji hipotesis ANOVA. Variabel tersebut tidak berkorelasi satu sama lain

Pada contoh di bawah ini, kami mencoba mengukur apakah ada korelasi antara FuelType dengan Harga Mobil. Berikut FuelType adalah prediktor kategori dan CarPrices adalah variabel target numerik

# Generating sample data
import pandas as pd
ColumnNames=['FuelType','CarPrice']
DataValues= [[  'Petrol',   2000],
             [  'Petrol',   2100],
             [  'Petrol',   1900],
             [  'Petrol',   2150],
             [  'Petrol',   2100],
             [  'Petrol',   2200],
             [  'Petrol',   1950],
             [  'Diesel',   2500],
             [  'Diesel',   2700],
             [  'Diesel',   2900],
             [  'Diesel',   2850],
             [  'Diesel',   2600],
             [  'Diesel',   2500],
             [  'Diesel',   2700],
             [  'CNG',   1500],
             [  'CNG',   1400],
             [  'CNG',   1600],
             [  'CNG',   1650],
             [  'CNG',   1600],
             [  'CNG',   1500],
             [  'CNG',   1500]
        
           
           ]
#Create the Data Frame
CarData=pd.DataFrame(data=DataValues,columns=ColumnNames)
print(CarData.head())
########################################################
# f_oneway() function takes the group data as input and 
# returns F-statistic and P-value
from scipy.stats import f_oneway

# Running the one-way anova test between CarPrice and FuelTypes
# Assumption(H0) is that FuelType and CarPrices are NOT correlated

# Finds out the Prices data for each FuelType as a list
CategoryGroupLists=CarData.groupby('FuelType')['CarPrice'].apply(list)

# Performing the ANOVA test
# We accept the Assumption(H0) only when P-Value > 0.05
AnovaResults = f_oneway(*CategoryGroupLists)
print('P-Value for Anova is: ', AnovaResults[1])

Keluaran Sampel

Korelasi dengan variabel kategori python

Karena output dari nilai-P hampir nol, karenanya, kami menolak H0. Artinya variabel tersebut saling berkorelasi

Korelasi antara dua fitur kategorikal

Ini adalah situasi yang sering muncul selama pembelajaran mesin klasifikasi. Variabel target bersifat kategorikal dan prediktornya dapat berupa kontinyu atau kategorikal, sehingga jika keduanya bersifat kategoris, maka kekuatan hubungan antara keduanya dapat diukur menggunakan uji Chi-square

Uji Chi-square menemukan probabilitas hipotesis Null (H0)

  • Asumsi(H0). Kedua kolom TIDAK terkait satu sama lain
  • Hasil Uji Chi-Square. Probabilitas H0 Benar
  • Informasi selengkapnya tentang ChiSq dapat ditemukan di sini

Ini dapat membantu untuk memahami apakah kedua variabel kategori berkorelasi satu sama lain atau tidak. Dalam skenario di bawah ini, kami mencoba mengukur korelasi antara GENDER dan LOAN_APPROVAL

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame(data=DataValues,columns=ColumnNames)
print(LoanData.head())
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab(index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN'])
print(CrosstabResult)

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency(CrosstabResult)

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption(H0)

print('The P-Value of the ChiSq Test is:', ChiSqResult[1])
_

Keluaran Sampel

Korelasi dengan variabel kategori python
Uji chi-square antara dua variabel kategorikal untuk mengetahui korelasinya

H0. Variabel tersebut tidak berkorelasi satu sama lain. Ini adalah H0 yang digunakan dalam uji Chi-square

Dalam contoh di atas, nilai p lebih tinggi dari 0. 05. Maka H0 akan diterima. Ini berarti variabel tidak berkorelasi satu sama lain. Ini berarti bahwa jika dua variabel berkorelasi, maka nilai p akan mendekati nol

Detail uji chi-square

Pada bagian ini, saya akan menjelaskan bagaimana kita dapat menguji dua kolom kategori dalam kumpulan data untuk menentukan apakah mereka saling bergantung (i. e. berkorelasi). Kami akan menggunakan uji statistik yang dikenal sebagai chi-kuadrat (biasanya ditulis sebagai χ2). Sebelum kita memulai pembahasan kita tentang chi-square, berikut adalah rangkuman singkat tentang metode pengujian yang dapat digunakan untuk menguji berbagai jenis variabel

Korelasi dengan variabel kategori python

Menggunakan statistik chi-kuadrat untuk menentukan apakah dua variabel kategori berkorelasi

Statistik chi-square (χ2) adalah cara untuk memeriksa hubungan antara dua variabel nominal kategori. Variabel nominal berisi nilai yang tidak memiliki urutan intrinsik. Contoh variabel nominal adalah jenis kelamin, ras, warna mata, warna kulit, dll. Sebaliknya, variabel ordinal berisi nilai yang diurutkan. Contoh variabel ordinal adalah kelas, tingkat pendidikan, status ekonomi, dll

Gagasan utama di balik uji chi-square adalah untuk membandingkan nilai yang diamati dalam data dengan nilai yang diharapkan dan melihat apakah mereka terkait atau tidak. Secara khusus, ini adalah cara yang berguna untuk memeriksa apakah dua variabel nominal kategori berkorelasi. Ini sangat penting dalam pembelajaran mesin di mana kami hanya ingin fitur yang berkorelasi dengan target digunakan untuk pelatihan

Ada dua jenis tes chi-square

  • Chi-Square Goodness of Fit Test — menguji apakah satu variabel mungkin berasal dari distribusi tertentu
  • Uji Kemandirian Chi-Square — menguji apakah dua variabel berkorelasi atau tidak

Lihat https. // www. jmp. com/en_us/statistics-knowledge-portal/chi-square-test. html untuk pembahasan yang lebih mendetail tentang dua uji chi-square di atas. Saat membandingkan untuk melihat apakah dua variabel kategori berkorelasi, kami akan menggunakan Uji Kemandirian Chi-Square

Langkah-langkah Melakukan Uji Chi-Square

Untuk menggunakan uji chi-square, kita perlu melakukan langkah-langkah berikut

  1. Tentukan hipotesis nol dan hipotesis alternatif. Mereka
  • H₀ (Hipotesis Null) — bahwa 2 variabel kategori yang dibandingkan adalah independen satu sama lain
  • H₁ (Hipotesis Alternatif) — bahwa 2 variabel kategori yang dibandingkan bergantung satu sama lain

2. Tentukan nilai α . Ini adalah risiko yang bersedia kami ambil dalam menarik kesimpulan yang salah. Sebagai contoh, misalkan kita menyetel α=0. 05 saat menguji independensi. Ini berarti kami mengambil risiko 5% untuk menyimpulkan bahwa dua variabel independen padahal kenyataannya tidak

3. Hitung skor chi-kuadrat menggunakan dua variabel kategori dan gunakan untuk menghitung nilai p. Nilai p rendah berarti ada korelasi tinggi antara dua variabel kategori (keduanya bergantung satu sama lain). Nilai p dihitung dari skor chi-square. Nilai p akan memberi tahu apakah hasil tes signifikan atau tidak

Dalam analisis chi-kuadrat, nilai-p adalah probabilitas untuk mendapatkan chi-kuadrat yang lebih besar atau lebih besar dari percobaan saat ini, namun data masih akan mendukung hipotesis. Ini adalah kemungkinan penyimpangan dari apa yang diharapkan karena kebetulan belaka. Secara umum nilai-p 0. 05 atau lebih besar dianggap kritis, kurang berarti penyimpangannya signifikan dan hipotesis yang diuji harus ditolak

Sumber. https. //passel2. unl. edu/view/lesson/9beaa382bf7e/8

Untuk menghitung nilai-p, kita membutuhkan dua informasi

  • Derajat kebebasan — jumlah kategori dikurangi 1
  • Skor chi-kuadrat

Jika p-value yang diperoleh adalah

  • < 0. 05 (nilai α yang telah kita pilih) kita tolak H₀ (Hipotesis Null) dan terima H₁ (Hipotesis Alternatif). Ini berarti kedua variabel kategori bergantung
  • > 0. 05 kami menerima H₀ (Hipotesis Null) dan menolak H₁ (Hipotesis Alternatif). Ini berarti kedua variabel kategori tersebut independen

Dalam kasus pemilihan fitur untuk machine learning, kami ingin fitur yang dibandingkan dengan target memiliki nilai-p rendah (kurang dari 0. 05), karena ini berarti fitur tersebut bergantung pada (berkorelasi dengan) target

Dengan skor chi-kuadrat yang dihitung, kami juga dapat menggunakannya untuk merujuk ke tabel chi-kuadrat untuk melihat apakah skor berada dalam wilayah penolakan atau wilayah penerimaan. Pada kita berikutnya, saya akan menggunakan dataset Titanic dan menerapkan uji chi-square pada beberapa fitur dan melihat bagaimana korelasinya dengan target.

Menggunakan uji chi-square pada dataset Titanic

Cara yang baik untuk memahami topik baru adalah melalui konsep menggunakan contoh. Untuk ini, saya akan menggunakan kumpulan data Titanic klasik (https. // www. kaggle. com/tedllh/titanic-train)

Kumpulan data Titanic sering digunakan dalam pembelajaran mesin untuk mendemonstrasikan cara membuat model pembelajaran mesin dan menggunakannya untuk membuat prediksi. Secara khusus, set data berisi beberapa fitur (Pclass, Sex, Age, Embarked, dll) dan satu target (Survived). Beberapa fitur dalam dataset adalah variabel kategori

  • Pclass-kelas kabin tempat penumpang berada
  • Jenis kelamin-jenis kelamin penumpang
  • Memulai-pelabuhan embarkasi
  • Selamat-jika penumpang selamat dari bencana

Karena bagian ini mengeksplorasi hubungan antara fitur kategori dan target, kami hanya tertarik pada kolom yang berisi nilai kategori.

Memuat Kumpulan Data

Mari memuat dataset dalam Pandas DataFrame

import pandas as pd
import numpy as np
df = pd.read_csv('titanic_train.csv')
df.sample(5)

Korelasi dengan variabel kategori python

Pembersihan Data dan Rekayasa Fitur

Ada beberapa kolom yang tidak terlalu berguna dan karenanya kami akan melanjutkan untuk membuangnya. Juga, ada beberapa nilai yang hilang jadi mari kita buang semua baris dengan nilai kosong

df.drop(columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True)
df.dropna(inplace=True)
df

Korelasi dengan variabel kategori python

Kami juga akan menambahkan satu kolom lagi bernama Sendiri, berdasarkan kolom Parch (Induk atau anak) dan Sibsp (Saudara atau pasangan). Ide yang ingin kami gali adalah apakah sendirian memengaruhi kemampuan bertahan penumpang. Jadi Sendiri adalah 1 jika Parch dan Sibsp bernilai 0, selain itu 0

df['Alone'] = (df['Parch'] + df['SibSp']).apply(
                  lambda x: 1 if x == 0 else 0)
df
_

Korelasi dengan variabel kategori python

Memvisualisasikan korelasi antara fitur dan target

Sekarang setelah data dibersihkan, mari kita coba memvisualisasikan bagaimana hubungan jenis kelamin penumpang dengan kelangsungan hidup mereka dalam kecelakaan itu

import seaborn as sns
sns.barplot(x='Sex', y='Survived', data=df, ci=None)     

Kolom Jenis Kelamin berisi data nominal (i. e. peringkat tidak penting)

Korelasi dengan variabel kategori python

Dari gambar di atas, kita bisa melihat bahwa dari seluruh penumpang wanita, lebih dari 70% selamat; . Sepertinya ada hubungan yang sangat kuat antara fitur Sex dan Survived . Untuk mengonfirmasi hal ini, kami akan menggunakan uji chi-kuadrat untuk mengonfirmasinya nanti

Bagaimana dengan Pclass dan Survived?

sns.barplot(x='Pclass', y='Survived', data=df, ci=None)
_

Korelasi dengan variabel kategori python

Mungkin tidak mengherankan, ini menunjukkan bahwa semakin tinggi kelas P yang dimiliki penumpang, semakin tinggi pula tingkat kelangsungan hidup penumpang tersebut. Ciri menarik berikutnya adalah jika tempat pemberangkatan menentukan siapa yang bertahan dan siapa yang tidak

sns.barplot(x='Embarked', y='Survived', data=df, ci=None)

Korelasi dengan variabel kategori python

Dari grafik, sepertinya lebih banyak orang yang berangkat dari C (Cherbourg) selamat

C = Cherbourg;

Kami juga ingin tahu apakah sendirian dalam perjalanan membuat seseorang lebih bisa bertahan

ax = sns.barplot(x='Alone', y='Survived', data=df, ci=None)    
ax.set_xticklabels(['Not Alone','Alone'])
_

Korelasi dengan variabel kategori python

Kita dapat melihat bahwa jika seseorang bersama keluarganya, dia akan memiliki peluang bertahan hidup yang lebih tinggi

Memvisualisasikan korelasi antara setiap fitur

Sekarang kita telah memvisualisasikan hubungan antara fitur kategorikal terhadap target (Survived), sekarang kita ingin memvisualisasikan hubungan antara setiap fitur. Sebelum melakukannya, kita perlu mengonversi nilai label di kolom Sex dan Embarked menjadi numerik. Untuk melakukannya, kita dapat menggunakan kelas LabelEncoder di sklearn

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as snsfrom sklearn import preprocessing

le = preprocessing.LabelEncoder()
le.fit(df['Sex'])
df['Sex'] = le.transform(df['Sex'])
sex_labels = dict(zip(le.classes_, le.transform(le.classes_)))
print(sex_labels)

le.fit(df['Embarked'])
df['Embarked'] = le.transform(df['Embarked'])
embarked_labels = dict(zip(le.classes_, 
                      le.transform(le.classes_)))
print(embarked_labels)
_

Label cuplikan kode di atas mengenkode kolom  Kelamin dan Embarked. Output menunjukkan pemetaan nilai untuk setiap kolom, yang nantinya sangat berguna saat melakukan prediksi

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame(data=DataValues,columns=ColumnNames)
print(LoanData.head())
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab(index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN'])
print(CrosstabResult)

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency(CrosstabResult)

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption(H0)

print('The P-Value of the ChiSq Test is:', ChiSqResult[1])
_0

Pernyataan berikut menunjukkan hubungan antara Embarked dan Sex

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame(data=DataValues,columns=ColumnNames)
print(LoanData.head())
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab(index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN'])
print(CrosstabResult)

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency(CrosstabResult)

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption(H0)

print('The P-Value of the ChiSq Test is:', ChiSqResult[1])
_1

Korelasi dengan variabel kategori python

Sepertinya lebih banyak laki-laki yang naik dari Southampton (S) daripada di Queenstown (Q) dan Cherbourg (C)

Bagaimana dengan Memulai dan Sendirian?

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame(data=DataValues,columns=ColumnNames)
print(LoanData.head())
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab(index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN'])
print(CrosstabResult)

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency(CrosstabResult)

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption(H0)

print('The P-Value of the ChiSq Test is:', ChiSqResult[1])
_2

Korelasi dengan variabel kategori python

Sepertinya sebagian besar dari mereka yang berangkat dari Queenstown sendirian

Dan terakhir, mari kita lihat hubungan antara Sex dan Alone

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame(data=DataValues,columns=ColumnNames)
print(LoanData.head())
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab(index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN'])
print(CrosstabResult)

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency(CrosstabResult)

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption(H0)

print('The P-Value of the ChiSq Test is:', ChiSqResult[1])
_3

Korelasi dengan variabel kategori python

Seperti yang bisa kita lihat, ada lebih banyak laki-laki daripada perempuan yang sendirian dalam perjalanan

Mendefinisikan Hipotesis

Kami sekarang mendefinisikan hipotesis nol dan hipotesis alternatif. Seperti yang dijelaskan sebelumnya, mereka

  • H₀ (Hipotesis Null) — bahwa 2 variabel kategori yang akan dibandingkan adalah independen satu sama lain
  • H₁ (Hipotesis Alternatif) — bahwa 2 variabel kategori yang dibandingkan bergantung satu sama lain

Dan kami menarik kesimpulan berdasarkan kondisi nilai-p berikut

  • p < 0. 05 — ini berarti kedua variabel kategori berkorelasi
  • hal > 0. 05 — ini berarti kedua variabel kategori tidak berkorelasi

Menghitung χ2 secara manual

Mari kita melalui langkah-langkah dalam menghitung nilai χ2 secara manual. Langkah pertama adalah membuat tabel kontingensi. Dengan menggunakan kolom Jenis Kelamin dan Bertahan Hidup sebagai contoh, pertama-tama kita membuat tabel kontingensi

Korelasi dengan variabel kategori python

Tabel kontingensi di atas menampilkan distribusi frekuensi dari dua kolom kategori — Seks dan Survived

Derajat Kebebasan selanjutnya dihitung sebagai (jumlah baris -1) * (jumlah kolom -1). Dalam contoh ini, derajat kebebasannya adalah (2–1)*(2–1) = 1

Setelah tabel kontingensi dibuat, jumlahkan semua baris dan kolom, seperti ini

Korelasi dengan variabel kategori python

Di atas adalah Nilai yang diamati

Selanjutnya, kita akan menghitung Nilai yang diharapkan. Inilah cara mereka dihitung

  • Ganti setiap nilai dalam nilai yang diamati dengan hasil kali jumlah kolomnya dan jumlah barisnya, dibagi dengan jumlah totalnya

Gambar berikut menunjukkan bagaimana nilai pertama dihitung

Korelasi dengan variabel kategori python

Gambar berikutnya menunjukkan bagaimana nilai kedua dihitung

Korelasi dengan variabel kategori python

Berikut adalah hasil untuk Nilai yang diharapkan 

Korelasi dengan variabel kategori python

Kemudian, hitung nilai chi-kuadrat untuk setiap sel menggunakan rumus untuk χ2

Korelasi dengan variabel kategori python

Dengan menerapkan rumus ini ke nilai yang Diamati dan Diharapkan, kita mendapatkan nilai chi-kuadrat

Korelasi dengan variabel kategori python

Skor chi-kuadrat adalah jumlah keseluruhan dari nilai chi-kuadrat

Korelasi dengan variabel kategori python

Kami dapat menggunakan situs web berikut untuk memverifikasi apakah nomornya benar

  • Kalkulator Chi-Square — https. // www. com.mathsisfun. com/data/chi-square-kalkulator. html

Implementasi Python untuk langkah-langkah di atas dimuat dalam fungsi chi2_by_hand() berikut

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame(data=DataValues,columns=ColumnNames)
print(LoanData.head())
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab(index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN'])
print(CrosstabResult)

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency(CrosstabResult)

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption(H0)

print('The P-Value of the ChiSq Test is:', ChiSqResult[1])
_4

Fungsi chi2_by_hand() mengambil tiga argumen — kerangka data yang berisi semua kolom, diikuti oleh dua string yang berisi nama dari dua kolom yang akan kita bandingkan. Ini mengembalikan tuple — skor chi-kuadrat, ditambah derajat kebebasan

Sekarang mari kita uji fungsi di atas menggunakan dataset Titanic. Pertama, mari kita bandingkan kolom  Sex dan  Survived 

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame(data=DataValues,columns=ColumnNames)
print(LoanData.head())
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab(index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN'])
print(CrosstabResult)

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency(CrosstabResult)

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption(H0)

print('The P-Value of the ChiSq Test is:', ChiSqResult[1])
_5

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame(data=DataValues,columns=ColumnNames)
print(LoanData.head())
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab(index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN'])
print(CrosstabResult)

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency(CrosstabResult)

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption(H0)

print('The P-Value of the ChiSq Test is:', ChiSqResult[1])
_6

Dengan menggunakan skor chi-kuadrat, sekarang kita dapat memutuskan apakah kita akan menerima atau menolak hipotesis nol menggunakan kurva distribusi chi-kuadrat

Korelasi dengan variabel kategori python

Sumbu x mewakili skor χ2. Area di sebelah kanan wilayah chi-kuadrat kritis dikenal sebagai wilayah penolakan. Area di sebelah kirinya dikenal sebagai wilayah penerimaan. Jika skor chi-kuadrat yang kami peroleh jatuh di wilayah penerimaan, hipotesis nol diterima;

Jadi, bagaimana cara mendapatkan wilayah chi-square kritis?

Korelasi dengan variabel kategori python

Kita dapat melihat Tabel Chi-Square di https. // www. com.mathsisfun. com/data/chi-square-table. html

Inilah cara kami menggunakan tabel chi-kuadrat. Dengan α disetel menjadi 0. 05, dan 1 derajat kebebasan, wilayah khi-kuadrat kritisnya adalah 3. 84 (lihat bagan di atas). Menempatkan nilai ini ke dalam kurva distribusi chi-kuadrat, kita dapat menyimpulkannya

Korelasi dengan variabel kategori python
  • Karena nilai chi-square yang dihitung (205) lebih besar dari 3. 84, oleh karena itu, jatuh di wilayah penolakan, dan karenanya hipotesis nol ditolak dan hipotesis alternatif diterima
  • Mengingat hipotesis alternatif kami sebagai H₁ (Hipotesis Alternatif) — bahwa 2 variabel kategori yang dibandingkan bergantung satu sama lain

Ini berarti bahwa kolom Sex and Survived saling bergantung satu sama lain. Kita dapat menggunakan fungsi chi2_by_hand() pada fitur lainnya

Menghitung nilai-p

Bagian sebelumnya menunjukkan bagaimana kita dapat menerima atau menolak hipotesis nol dengan memeriksa skor chi-kuadrat dan membandingkannya dengan kurva distribusi chi-kuadrat. Cara alternatif untuk menerima atau menolak hipotesis nol adalah dengan menggunakan nilai-p. Ingat, nilai-p dapat dihitung menggunakan skor chi-kuadrat dan derajat kebebasan. Untuk penyederhanaan, kita tidak akan masuk ke perincian tentang cara menghitung nilai-p dengan tangan

Di Python, kita dapat menghitung nilai-p menggunakan fungsi sf() dari modul statistik

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame(data=DataValues,columns=ColumnNames)
print(LoanData.head())
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab(index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN'])
print(CrosstabResult)

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency(CrosstabResult)

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption(H0)

print('The P-Value of the ChiSq Test is:', ChiSqResult[1])
_7

Kita sekarang dapat memanggil fungsi chi2_by_hand() dan mendapatkan skor chi_square, derajat kebebasan, dan nilai-p

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame(data=DataValues,columns=ColumnNames)
print(LoanData.head())
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab(index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN'])
print(CrosstabResult)

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency(CrosstabResult)

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption(H0)

print('The P-Value of the ChiSq Test is:', ChiSqResult[1])
_8

Kode di atas menghasilkan nilai-p berikut

# Creating a sample data frame
import pandas as pd
ColumnNames=['CIBIL','AGE','GENDER' ,'SALARY', 'APPROVE_LOAN']
DataValues=[ [480, 28, 'M', 610000, 'Yes'],
             [480, 42, 'M',140000, 'No'],
             [480, 29, 'F',420000, 'No'],
             [490, 30, 'M',420000, 'No'],
             [500, 27, 'M',420000, 'No'],
             [510, 34, 'F',190000, 'No'],
             [550, 24, 'M',330000, 'Yes'],
             [560, 34, 'M',160000, 'Yes'],
             [560, 25, 'F',300000, 'Yes'],
             [570, 34, 'M',450000, 'Yes'],
             [590, 30, 'F',140000, 'Yes'],
             [600, 33, 'M',600000, 'Yes'],
             [600, 22, 'M',400000, 'Yes'],
             [600, 25, 'F',490000, 'Yes'],
             [610, 32, 'M',120000, 'Yes'],
             [630, 29, 'F',360000, 'Yes'],
             [630, 30, 'M',480000, 'Yes'],
             [660, 29, 'F',460000, 'Yes'],
             [700, 32, 'M',470000, 'Yes'],
             [740, 28, 'M',400000, 'Yes']]
 
#Create the Data Frame
LoanData=pd.DataFrame(data=DataValues,columns=ColumnNames)
print(LoanData.head())
#########################################################
# Cross tabulation between GENDER and APPROVE_LOAN
CrosstabResult=pd.crosstab(index=LoanData['GENDER'],columns=LoanData['APPROVE_LOAN'])
print(CrosstabResult)

# importing the required function
from scipy.stats import chi2_contingency

# Performing Chi-sq test
ChiSqResult = chi2_contingency(CrosstabResult)

# P-Value is the Probability of H0 being True
# If P-Value>0.05 then only we Accept the assumption(H0)

print('The P-Value of the ChiSq Test is:', ChiSqResult[1])
_9

Sebagai rekap cepat, kami menerima atau menolak hipotesis dan membentuk kesimpulan berdasarkan kondisi nilai-p berikut

  • p < 0. 05 — ini berarti kedua variabel kategori berkorelasi
  • hal > 0. 05 — ini berarti kedua variabel kategori tidak berkorelasi

Dan sejak p < 0. 05 — ini berarti kedua variabel kategori berkorelasi

Mencoba fitur lainnya

Mari kita coba kolom kategorikal yang berisi nilai nominal

import pandas as pd
import numpy as np
df = pd.read_csv('titanic_train.csv')
df.sample(5)
0

Karena nilai-p untuk Embarked dan Alone adalah < 0. 05, kita dapat menyimpulkan bahwa fitur Embarked dan Alone berkorelasi dengan target Bertahan , dan harus disertakan untuk pelatihan dalam model kami

Ringkasan Chi-kuadrat

Beberapa catatan kehati-hatian akan berguna di sini

  1. Sementara koefisien Pearson dan koefisien peringkat Spearman mengukur kekuatan hubungan antara dua variabel, uji chi-kuadrat mengukur signifikansi hubungan antara dua variabel. Apa yang diberitahukan kepada kita adalah apakah hubungan yang kita temukan dalam sampel kemungkinan ada dalam populasi, atau seberapa besar kemungkinan itu terjadi secara kebetulan karena kesalahan pengambilan sampel.
  2. Uji chi-square sensitif terhadap frekuensi kecil di tabel kontingensi. Umumnya, jika sel dalam tabel kontingensi memiliki frekuensi 5 atau kurang, uji chi-kuadrat akan menyebabkan kesalahan dalam kesimpulan. Juga, uji chi-kuadrat tidak boleh digunakan jika ukuran sampel kurang dari 50
Detail ANOVA

Uji chi-square digunakan jika variabel independen dan dependen semuanya merupakan variabel kategori. Namun, bagaimana jika variabel independennya kategoris dan variabel dependennya numerik?

Jadi di bagian ini, diskusi kita akan berkisar pada ANOVA dan bagaimana kita menggunakannya dalam pembelajaran mesin untuk pemilihan fitur. Sebelum kita mulai, ada gunanya meringkas berbagai metode yang telah kita diskusikan sejauh ini

Korelasi dengan variabel kategori python

Apa itu ANOVA?

ANOVA digunakan untuk menguji dua variabel, dimana

  • satu adalah variabel kategori
  • lainnya adalah variabel numerik

ANOVA digunakan ketika variabel kategori memiliki setidaknya 3 grup (i. e tiga nilai unik yang berbeda). Jika kami ingin membandingkan dua grup saja, kami menggunakan uji-t. ANOVA memberi tahu kami jika variabel numerik berubah sesuai dengan level variabel kategori. ANOVA menggunakan uji-f untuk menguji persamaan rata-rata secara statistik. Uji-F dinamai menurut statistik uji mereka, F, yang dinamai untuk menghormati Sir Ronald Fisher

Berikut adalah beberapa contoh yang memudahkan pemahaman saat kita bisa menggunakan ANOVA

Kami memiliki kumpulan data yang berisi informasi tentang sekelompok orang yang berkaitan dengan penggunaan media sosial mereka dan jumlah jam tidur mereka

Korelasi dengan variabel kategori python

Kami ingin mengetahui apakah jumlah penggunaan media sosial (variabel kategori) berdampak langsung pada jumlah jam tidur (variabel numerik)

Kami memiliki kumpulan data yang berisi tiga merek obat yang berbeda dan jumlah hari untuk efek obat tersebut

Korelasi dengan variabel kategori python

Kami ingin mengetahui apakah ada hubungan langsung antara merek tertentu dan keefektifannya

ANOVA memeriksa apakah ada varians yang sama antara kelompok fitur kategori sehubungan dengan respons numerik. Jika ada varians yang sama antar kelompok, itu berarti fitur ini tidak berdampak pada respons dan karenanya (variabel kategori) tidak dapat dipertimbangkan untuk pelatihan model.

Melakukan ANOVA dengan tangan

Cara terbaik untuk memahami ANOVA adalah dengan menggunakan contoh. Dalam contoh berikut, saya menggunakan kumpulan data fiktif di mana saya mencatat waktu reaksi sekelompok orang ketika mereka diberi jenis minuman tertentu.

Kumpulan Data Sampel

Saya memiliki contoh kumpulan data bernama minuman. csv berisi konten berikut

import pandas as pd
import numpy as np
df = pd.read_csv('titanic_train.csv')
df.sample(5)
1

Semuanya ada 10 tim — setiap tim terdiri dari 3 orang. Setiap orang dalam tim diberi tiga jenis minuman — air, coke, dan kopi. Setelah mengkonsumsi minuman tersebut, mereka diminta melakukan beberapa aktivitas dan dicatat waktu reaksinya. Tujuan dari percobaan ini adalah untuk menentukan apakah minuman tersebut berpengaruh pada waktu reaksi seseorang

Mari memuat dataset terlebih dahulu ke dalam Pandas DataFrame

import pandas as pd
import numpy as np
df = pd.read_csv('titanic_train.csv')
df.sample(5)
2

Catat ukuran pengamatan, yang akan kita gunakan nanti

import pandas as pd
import numpy as np
df = pd.read_csv('titanic_train.csv')
df.sample(5)
_3

Korelasi dengan variabel kategori python

Memvisualisasikan kumpulan data

Sangat berguna untuk memvisualisasikan distribusi data menggunakan Boxplot

import pandas as pd
import numpy as np
df = pd.read_csv('titanic_train.csv')
df.sample(5)
_4

Korelasi dengan variabel kategori python

Kita dapat melihat bahwa ketiga jenis minuman tersebut memiliki median waktu reaksi yang hampir sama

Memutar kerangka data

Untuk memudahkan perhitungan ANOVA, kita perlu memutar kerangka data

import pandas as pd
import numpy as np
df = pd.read_csv('titanic_train.csv')
df.sample(5)
5

Korelasi dengan variabel kategori python

Kolom mewakili tiga jenis minuman dan baris mewakili 10 tim. Kita juga akan menggunakan kesempatan ini untuk mencatat jumlah item di setiap grup, serta jumlah grup yang akan kita manfaatkan nanti.

import pandas as pd
import numpy as np
df = pd.read_csv('titanic_train.csv')
df.sample(5)
6

Korelasi dengan variabel kategori python

Mendefinisikan Hipotesis

Kami sekarang mendefinisikan hipotesis nol dan hipotesis alternatif, seperti uji chi-square. Mereka

  • H₀ (Hipotesis nol) — bahwa tidak ada perbedaan di antara rata-rata kelompok
  • H₁ (Hipotesis alternatif) — bahwa setidaknya satu kelompok berbeda secara signifikan dari rata-rata keseluruhan variabel dependen

Langkah 1 — Menghitung rata-rata untuk semua kelompok

Kami sekarang siap untuk memulai perhitungan kami untuk ANOVA. Pertama, mari kita cari rata-rata untuk setiap grup

import pandas as pd
import numpy as np
df = pd.read_csv('titanic_train.csv')
df.sample(5)
7

Korelasi dengan variabel kategori python

Dari sini, kita sekarang dapat menghitung rata-rata keseluruhan

import pandas as pd
import numpy as np
df = pd.read_csv('titanic_train.csv')
df.sample(5)
_8

Korelasi dengan variabel kategori python

Langkah 2 — Hitung Jumlah Kuadrat

Sekarang kita telah menghitung rata-rata keseluruhan, kita dapat melanjutkan untuk menghitung yang berikut

  • Jumlah kuadrat dari semua pengamatan — SS_total
  • Jumlah kuadrat dalam — SS_dalam
  • Jumlah kuadrat antara — SS_between

Jumlah kuadrat dari semua pengamatan — SS_total

Jumlah kuadrat semua pengamatan dihitung dengan mengurangkan setiap pengamatan dari rata-rata keseluruhan, lalu menjumlahkan semua kuadrat perbedaan

Korelasi dengan variabel kategori python
Korelasi dengan variabel kategori python

Secara terprogram, SS_total dihitung sebagai

import pandas as pd
import numpy as np
df = pd.read_csv('titanic_train.csv')
df.sample(5)
_9

Jumlah kuadrat di dalam — SS_within

Jumlah kuadrat di dalam adalah jumlah deviasi kuadrat dari skor di sekitar rata-rata grupnya

Korelasi dengan variabel kategori python

Secara terprogram, SS_within dihitung sebagai

df.drop(columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True)
df.dropna(inplace=True)
df
0

Jumlah Kuadrat antara — SS_between

Selanjutnya, kami menghitung jumlah kuadrat rata-rata grup dari rata-rata keseluruhan

Korelasi dengan variabel kategori python
Korelasi dengan variabel kategori python

Secara terprogram, SS_between dihitung sebagai

df.drop(columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True)
df.dropna(inplace=True)
df
1

Kami dapat memverifikasi itu

SS_total = SS_between + SS_within

Membuat Tabel ANOVA

Dengan semua nilai dihitung, sekarang kita dapat melengkapi tabel ANOVA. Ingat kita memiliki variabel berikut

Korelasi dengan variabel kategori python

Kita dapat menghitung berbagai derajat kebebasan sebagai berikut

df.drop(columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True)
df.dropna(inplace=True)
df
2

Dari penjelasan di atas, hitung berbagai nilai rata-rata kuadrat

df.drop(columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True)
df.dropna(inplace=True)
df
_3

Terakhir, kita dapat menghitung nilai-F, yang merupakan rasio dari dua varian

df.drop(columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True)
df.dropna(inplace=True)
df
_4

Ingat sebelumnya bahwa saya menyebutkan ANOVA menggunakan uji-f untuk menguji secara statistik persamaan rata-rata

Setelah nilai-F diperoleh, sekarang kita harus merujuk ke tabel distribusi-f (lihat http. // www. socr. ucla. edu/Applet. dir/F_Tabel. html untuk satu contoh) untuk mendapatkan nilai f-critical. Tabel distribusi-f disusun berdasarkan nilai α (biasanya 0. 05). Jadi pertama-tama kita harus mencari tabel berdasarkan α=0. 05

Korelasi dengan variabel kategori python
Sumber. http. // www. socr. ucla. edu/Applet. dir/F_Tabel. html

Selanjutnya, amati bahwa kolom pada tabel distribusi-f didasarkan pada df1 sedangkan baris didasarkan pada df2. Kita bisa mendapatkan  df1 dan df2 dari variabel sebelumnya yang telah kita buat

df.drop(columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True)
df.dropna(inplace=True)
df
5

Dengan menggunakan nilai df1 dan df2, kita sekarang dapat menemukan nilai kritis f dengan menemukan kolom df1 dan baris df2

Korelasi dengan variabel kategori python

Dari gambar di atas, kita dapat melihat bahwa nilai f-critical adalah 3. 3541. Dengan menggunakan nilai ini, sekarang kita dapat memutuskan apakah kita akan menerima atau menolak hipotesis nol menggunakan kurva distribusi-F

Korelasi dengan variabel kategori python

Karena nilai-f (0. 0171, yang dapat kita hitung) kurang dari nilai kritis-f dalam tabel distribusi-f, kita menerima hipotesis nol — ini berarti tidak ada varian dalam kelompok yang berbeda — semua rata-rata adalah sama. Untuk machine learning, fitur ini — drink_type, tidak boleh disertakan untuk pelatihan karena tampaknya berbagai jenis minuman tidak berpengaruh pada waktu reaksi. Kita sebaiknya hanya menyertakan fitur untuk pelatihan hanya jika kita menolak hipotesis nol karena ini berarti bahwa nilai dalam jenis minuman memengaruhi waktu reaksi

Menggunakan modul Stats untuk menghitung f-score

Di bagian sebelumnya, kami menghitung nilai f untuk kumpulan data kami secara manual. Sebenarnya, ada cara yang lebih mudah — gunakan fungsi f_oneway() modul statistik untuk menghitung nilai-f dan nilai-p

df.drop(columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True)
df.dropna(inplace=True)
df
6

Fungsi f_oneway() mengambil grup sebagai input dan menampilkan nilai ANOVA F dan p

Korelasi dengan variabel kategori python

Di atas, nilai-f adalah 0. 0170760934691432 (identik dengan yang kami hitung secara manual) dan p-value adalah 0. 9830794846682348

Perhatikan bahwa fungsi f_oneway() mengambil sejumlah variabel argumen

Korelasi dengan variabel kategori python

Jika kita memiliki banyak grup, akan sangat membosankan untuk menyampaikan nilai semua grup satu per satu. Jadi, ada cara yang lebih mudah

df.drop(columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True)
df.dropna(inplace=True)
df
_7

Menggunakan modul statsmodels untuk menghitung f-score

Cara lain untuk menghitung nilai-f adalah dengan menggunakan modul statsmodel . Pertama-tama kita membuat model menggunakan fungsi ols() , lalu memanggil fungsi fit() pada instance model. Terakhir, kita memanggil fungsi anova_lm() pada model yang dipasang dan menentukan jenis uji ANOVA yang akan dijalankan pada model tersebut. Ada 3 jenis tes ANOVA yang harus dilakukan, tetapi pembahasannya berada di luar cakupan artikel ini

df.drop(columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True)
df.dropna(inplace=True)
df
8

Cuplikan kode di atas menghasilkan hasil berikut, yang sama dengan nilai-f yang telah kita hitung sebelumnya (0. 017076)

Korelasi dengan variabel kategori python

Fungsi anova_lm() juga menampilkan nilai-p (0. 983079). Kita dapat menggunakan aturan berikut untuk menentukan apakah variabel kategori memiliki pengaruh terhadap variabel numerik

  • jika p < 0. 05, hal ini berarti variabel kategori memiliki pengaruh yang signifikan terhadap variabel numerik
  • jika p > 0. 05, hal ini berarti variabel kategori tidak berpengaruh signifikan terhadap variabel numerik

Karena p-nilai sekarang 0. 983079 (>0. 05), ini berarti jenis_minuman tidak memiliki pengaruh yang signifikan terhadap waktu_reaksi

Ringkasan ANOVA

ANOVA membantu untuk menentukan apakah variabel kategori memiliki pengaruh pada variabel numerik. Selama ini uji ANOVA yang telah kita bahas dikenal dengan uji ANOVA satu arah. Ada beberapa variasi ANOVA

  • ANOVA satu arah— digunakan untuk memeriksa bagaimana variabel numerik merespons tingkat satu variabel kategori independen
  • ANOVA dua arah —digunakan untuk memeriksa bagaimana variabel numerik merespons tingkat dua variabel kategori independen
  • Multi-way ANOVA — digunakan untuk memeriksa bagaimana variabel numerik merespons tingkat dari beberapa variabel kategori independen

Menggunakan ANOVA dua arah atau ANOVA multi-arah, kami dapat menyelidiki dampak gabungan dari dua (atau lebih) variabel kategori independen pada satu variabel numerik dependen

Sumber daya

df.drop(columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], 
        inplace=True)
df.dropna(inplace=True)
df
_9

https. // menuju ilmu data. com/statistics-in-python-using-chi-square-for-feature-selection-d44f467ca745

Bagaimana menemukan korelasi untuk variabel kategori di Python?

Untuk mencari korelasi variabel kategori, kita akan menggunakan library bernama dython. .
NumPy
Panda
yg keturunan dr laut
SciPy
matplotlib
scikit-belajar
Scikit-plot

Bisakah Anda melakukan korelasi dengan variabel kategori?

Selanjutnya, jika salah satu variabel dari pasangan adalah kategori, kita tidak dapat menggunakan koefisien korelasi . Kami harus beralih ke metrik lain. Jika x dan y keduanya kategorikal, kita dapat mencoba Cramer's V atau koefisien phi.

Bagaimana cara memeriksa korelasi antara variabel kategorikal dan kontinu Python?

Cari ANOVA dengan python (dalam R akan "aov") . Ini membantu Anda mengidentifikasi, jika rata-rata (nilai kontinu) dari kelompok yang berbeda (nilai kategorikal) memiliki rata-rata berbeda yang signifikan. Jika Anda hanya memiliki dua grup, gunakan t dua sisi. tes (berpasangan atau tidak berpasangan).

Bagaimana Anda menemukan korelasi antara variabel kategori dan numerik dengan Python?

Bagaimana mengukur korelasi antara variabel numerik dan kategori di Python. Skenario ini dapat terjadi ketika Anda melakukan regresi atau klasifikasi dalam pembelajaran mesin. Dalam kedua kasus tersebut, kekuatan korelasi antar variabel dapat diukur menggunakan uji ANOVA .