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 Show
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 Karena output dari nilai-P hampir nol, karenanya, kami menolak H0. Artinya variabel tersebut saling berkorelasi Korelasi antara dua fitur kategorikalIni 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)
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 Uji chi-square antara dua variabel kategorikal untuk mengetahui korelasinyaH0. 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-squarePada 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 Menggunakan statistik chi-kuadrat untuk menentukan apakah dua variabel kategori berkorelasiStatistik 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
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-SquareUntuk menggunakan uji chi-square, kita perlu melakukan langkah-langkah berikut
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
Untuk menghitung nilai-p, kita membutuhkan dua informasi
Jika p-value yang diperoleh adalah
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 TitanicCara 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
Karena bagian ini mengeksplorasi hubungan antara fitur kategori dan target, kami hanya tertarik pada kolom yang berisi nilai kategori. Memuat Kumpulan DataMari memuat dataset dalam Pandas DataFrame import pandas as pd import numpy as np df = pd.read_csv('titanic_train.csv') df.sample(5) Pembersihan Data dan Rekayasa FiturAda 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 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_ Memvisualisasikan korelasi antara fitur dan targetSekarang 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) 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)_ 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) 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'])_ Kita dapat melihat bahwa jika seseorang bersama keluarganya, dia akan memiliki peluang bertahan hidup yang lebih tinggi Memvisualisasikan korelasi antara setiap fiturSekarang 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 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 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 Seperti yang bisa kita lihat, ada lebih banyak laki-laki daripada perempuan yang sendirian dalam perjalanan Mendefinisikan HipotesisKami sekarang mendefinisikan hipotesis nol dan hipotesis alternatif. Seperti yang dijelaskan sebelumnya, mereka
Dan kami menarik kesimpulan berdasarkan kondisi nilai-p berikut
Menghitung χ2 secara manualMari 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 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 Di atas adalah Nilai yang diamati Selanjutnya, kita akan menghitung Nilai yang diharapkan. Inilah cara mereka dihitung
Gambar berikut menunjukkan bagaimana nilai pertama dihitung Gambar berikutnya menunjukkan bagaimana nilai kedua dihitung Berikut adalah hasil untuk Nilai yang diharapkan Kemudian, hitung nilai chi-kuadrat untuk setiap sel menggunakan rumus untuk χ2 Dengan menerapkan rumus ini ke nilai yang Diamati dan Diharapkan, kita mendapatkan nilai chi-kuadrat Skor chi-kuadrat adalah jumlah keseluruhan dari nilai chi-kuadrat Kami dapat menggunakan situs web berikut untuk memverifikasi apakah nomornya benar
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 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? 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
Ini berarti bahwa kolom Sex and Survived saling bergantung satu sama lain. Kita dapat menggunakan fungsi chi2_by_hand() pada fitur lainnya Menghitung nilai-pBagian 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
Dan sejak p < 0. 05 — ini berarti kedua variabel kategori berkorelasi Mencoba fitur lainnyaMari 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-kuadratBeberapa catatan kehati-hatian akan berguna di sini
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 Apa itu ANOVA?ANOVA digunakan untuk menguji dua variabel, dimana
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 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 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 tanganCara 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 SampelSaya 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 Memvisualisasikan kumpulan dataSangat 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 Kita dapat melihat bahwa ketiga jenis minuman tersebut memiliki median waktu reaksi yang hampir sama Memutar kerangka dataUntuk 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 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 Mendefinisikan HipotesisKami sekarang mendefinisikan hipotesis nol dan hipotesis alternatif, seperti uji chi-square. Mereka
Langkah 1 — Menghitung rata-rata untuk semua kelompokKami 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 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 Langkah 2 — Hitung Jumlah KuadratSekarang kita telah menghitung rata-rata keseluruhan, kita dapat melanjutkan untuk menghitung yang berikut
Jumlah kuadrat dari semua pengamatan — SS_totalJumlah kuadrat semua pengamatan dihitung dengan mengurangkan setiap pengamatan dari rata-rata keseluruhan, lalu menjumlahkan semua kuadrat perbedaan 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_withinJumlah kuadrat di dalam adalah jumlah deviasi kuadrat dari skor di sekitar rata-rata grupnya Secara terprogram, SS_within dihitung sebagai df.drop(columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], inplace=True) df.dropna(inplace=True) df0 Jumlah Kuadrat antara — SS_betweenSelanjutnya, kami menghitung jumlah kuadrat rata-rata grup dari rata-rata keseluruhan Secara terprogram, SS_between dihitung sebagai df.drop(columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], inplace=True) df.dropna(inplace=True) df1 Kami dapat memverifikasi itu SS_total = SS_between + SS_within Membuat Tabel ANOVADengan semua nilai dihitung, sekarang kita dapat melengkapi tabel ANOVA. Ingat kita memiliki variabel berikut Kita dapat menghitung berbagai derajat kebebasan sebagai berikut df.drop(columns=['PassengerId','Name', 'Ticket','Fare','Cabin'], inplace=True) df.dropna(inplace=True) df2 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 Sumber. http. // www. socr. ucla. edu/Applet. dir/F_Tabel. htmlSelanjutnya, 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) df5 Dengan menggunakan nilai df1 dan df2, kita sekarang dapat menemukan nilai kritis f dengan menemukan kolom df1 dan baris df2 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 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-scoreDi 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) df6 Fungsi f_oneway() mengambil grup sebagai input dan menampilkan nilai ANOVA F dan p 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 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-scoreCara 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) df8 Cuplikan kode di atas menghasilkan hasil berikut, yang sama dengan nilai-f yang telah kita hitung sebelumnya (0. 017076) Fungsi anova_lm() juga menampilkan nilai-p (0. 983079). Kita dapat menggunakan aturan berikut untuk menentukan apakah variabel kategori memiliki pengaruh terhadap variabel numerik
Karena p-nilai sekarang 0. 983079 (>0. 05), ini berarti jenis_minuman tidak memiliki pengaruh yang signifikan terhadap waktu_reaksi Ringkasan ANOVAANOVA 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
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 . |