Prediksi Risiko Keuangan
Menurut survei DataIndonesia.id pada 2023, 46,3% generasi Z di Indonesia menjadi generasi sandwich, di mana mereka bertanggung jawab untuk menghidupi diri sendiri, orang tua, dan anaknya dalam waktu yang bersamaan. Akibatnya, 73,38% gen Z yang menjadi generasi sandwich merasa bersalah jika tidak memenuhi kebutuhan keluarga dan 66,19% juga merasa khawatir terhadap masa depan dirinya. Sebanyak 51,8% gen z yang menjadi generasi sandwich mengaku sulit memiliki tabungan pribadi atau keluarga inti. Lalu, 40,29% dari mereka mengalami stres dan burnout. Sandwich generation adalah generasi yang mengharuskan seseorang menggunakan penghasilannya untuk turut menghidupi generasi atas (orang tua) dan generasi bawah (anak). Sedangkan, diri sendiri berada di tengah-tengah dan terhimpit dua generasi tersebut layaknya sebuah sandwich. Untuk memutus generasi sandwich, kita sebagai individu perlu sadar akan pentingnya literasi keuangan. Mengelola keuangan dibutuhkan pemahaman yang baik tentang penghasilan, pengeluaran, tabungan, dll. Banyak individu yang kesulitan dalam perencanaan keuangan serta menilai risiko keuangan mereka. Oleh karena itu, model prediksi risiko keuangan berdasarkan profil individu ini dapat memberikan insight yang berguna dan rekomendasi yang tepat. Model ini akan memperhitungkan berbagai faktor seperti penghasilan, pengeluaran, tabungan, utang, dan rasio utang terhadap penghasilan, serta memberikan penilaian apakah individu tersebut berada pada posisi yang aman atau berisiko tinggi dalam hal keuangan. Referensi: apa itu sandwich generation ?
- Bagaimana cara memprediksi tingkat risiko keuangan seseorang berdasarkan data penghasilan, pengeluaran, tabungan, dan utang mereka?
- Apa rekomendasi terbaik yang dapat diberikan kepada individu yang sesuai dengan risiko keuangan mereka?
- Membangun model yang dapat memprediksi risiko keuangan individu dengan menggunakan data penghasilan, pengeluaran, tabungan, dan utang.
- Memberikan rekomendasi yang tepat untuk individu sesuai dengan risiko keuangan, seperti saran untuk menabung lebih banyak atau mengurangi pengeluaran.
Solusi 1 : Deskripsi : Karena dataset belum memiliki label yang sesuai, maka dibuat pengkondisian untuk menentukan kriteria labelnya.
Solusi 2 : Penggunaan Model Machine Learning Neural Network dan Regresi Logistik. Deskripsi : Untuk memprediksi tingkat risiko keuangan, maka digunakan dua model ML, Neural Network dan Regresi Logistik sebagai perbandingan.
Langkah Mencapai Goals :
- Preprocessing Data : Menstandarisasi dan menangani outlier pada data.
- Train Model: Melatih 2 model Neural Network dan Regresi Logistik dengan data yang telah diproses.
- Evaluasi Model: Menggunakan accuracy dan metrik tambahan seperti precision, recall, dan F1-score akan digunakan untuk mengukur kemampuan model dalam mengklasifikasikan tingkat risiko.
- Pengembangan Rekomendasi: Berdasarkan output model, memberikan rekomendasi seperti menambah tabungan atau mengurangi pengeluaran untuk individu yang memiliki risiko tinggi.
Metrik untuk Evaluasi:
- Accuracy: Persentase prediksi yang benar dari total prediksi.
- Precision, Recall, F1-Score: Mengukur ketepatan dan kelengkapan klasifikasi dalam memprediksi risiko yang sebenarnya.
- link dataset : kaggle
- Jumlah data : 1000000 baris dan 51 kolom
- Kondisi data : Data sudah cukup bersih (Tidak ada missing value atau duplikasi), namun perlu ditangani Outlier yang ada diluar batas atas dan bawah.
- Fitur dalam data :
- CreditScore: Skor kredit individu (300 hingga 850)
- AnnualIncome: Pendapatan tahunan individu (dalam dolar)
- LoanAmount: Jumlah pinjaman yang diminta (dalam dolar)
- LoanDuration: Durasi pinjaman (dalam tahun)
- Age: Usia individu (dalam tahun)
- EmploymentStatus: Status pekerjaan individu (Employed, Unemployed, Self-Employed)
- MaritalStatus: Status pernikahan individu (Single, Married, Divorced, Widowed)
- NumberOfDependents: Jumlah tanggungan
- EducationLevel: Tingkat pendidikan individu (High School, Associate, Bachelor, Master, Doctorate)
- HomeOwnershipStatus: Status kepemilikan rumah (Own, Rent, Mortgage, Other)
- MonthlyDebtPayments: Pembayaran utang bulanan
- CreditCardUtilizationRate: Tingkat penggunaan kartu kredit (0 hingga 1)
- NumberOfOpenCreditLines: Jumlah jalur kredit terbuka
- NumberOfCreditInquiries: Jumlah pertanyaan kredit dalam 6 bulan terakhir
- DebtToIncomeRatio: Rasio utang terhadap pendapatan (0 banding 1)
- BankruptcyHistory: Apakah individu tersebut memiliki riwayat kebangkrutan (0: No, 1: Yes)
- LoanPurpose: Tujuan pinjaman (Home, Auto, Education, Debt Consolidation, Other)
- PreviousLoanDefaults: Apakah individu tersebut telah gagal membayar pinjaman sebelumnya (0: No, 1: Yes)
- InterestRate: Suku bunga pinjaman (0,01 hingga 0,3)
- PaymentHistory: Tahun riwayat pembayaran
- SavingsAccountBalance: Saldo rekening tabungan (dalam dolar)
- CheckingAccountBalance: Saldo rekening giro (dalam dolar)
- InvestmentAccountBalance: Saldo rekening investasi (dalam dolar)
- RetirementAccountBalance: Saldo rekening pensiun (dalam dolar)
- EmergencyFundBalance: Saldo dana darurat (dalam dolar)
- TotalAssets: Total aset (dalam dolar)
- TotalLiabilities: Total liabilitas (dalam dolar)
- NetWorth: Kekayaan bersih (dalam dolar)
- LengthOfCreditHistory: Lamanya riwayat kredit (dalam tahun)
- MortgageBalance: Saldo hipotek (dalam dolar)
- RentPayments: Pembayaran sewa bulanan (dalam dolar)
- AutoLoanBalance: Saldo pinjaman mobil (dalam dolar)
- PersonalLoanBalance: Saldo pinjaman pribadi (dalam dolar)
- StudentLoanBalance: Saldo pinjaman mahasiswa (dalam dolar)
- UtilityBillsPaymentHistory: Riwayat pembayaran tagihan utilitas (0 hingga 1)
- HealthInsuranceStatus: Status asuransi kesehatan (Insured, Uninsured)
- LifeInsuranceStatus: Status asuransi jiwa (Insured, Uninsured)
- CarInsuranceStatus: Status asuransi mobil (Insured, Uninsured)
- HomeInsuranceStatus: Status asuransi rumah (Insured, Uninsured)
- OtherInsurancePolicies: Jumlah polis asuransi lainnya
- EmployerType: Jenis pemberi kerja (Private, Public, Self-Employed, Other)
- JobTenure: Masa jabatan (dalam tahun)
- MonthlySavings: Tabungan bulanan (dalam dolar)
- AnnualBonuses: Bonus tahunan (dalam dolar)
- AnnualExpenses: Biaya tahunan (dalam dolar)
- MonthlyHousingCosts: Biaya perumahan bulanan (dalam dolar)
- MonthlyTransportationCosts: Biaya transportasi bulanan (dalam dolar)
- MonthlyFoodCosts: Biaya makanan bulanan (dalam dolar)
- MonthlyHealthcareCosts: Biaya perawatan kesehatan bulanan (dalam dolar)
- MonthlyEntertainmentCosts: Biaya hiburan bulanan (dalam dolar)
- LoanApproved: Apakah pinjaman disetujui (0: No, 1: Yes)
Membuat fitu baru yaitu AnnualSavings (Simpanan pertahun) yang diambil dari simpanan perbulan dikali 12 dan AnnualLiabilities (Pembayaran hutang pertahun) yang diambil dari pembayaran hutang dikali 12.
Dengan perhitungan:
- debt_to_income_ratio = AnnualLiabilities / AnnualIncome
- savings_to_expenses_ratio = AnnualSavings / AnnualExpenses
Dari fitur baru diatas, akan dibuat Label RiskCategory, dengan kriteria: Rendah: Apabila user memiliki rasio tabungan terhadap pengeluaran lebih besar dari 40% dan rasio hutang terhadap pemasukan kurang dari 30%. Atau keuangan stabil, tabungan cukup, dan liabilitas kecil. Sedang: Apabila user memiliki rasio tabungan terhadap pengeluaran lebih besar dari 20% dan rasio hutang terhadap pemasukan kurang dari 40%. Artinya keuangan cukup stabil, tapi perlu perhatian terhadap utang atau pengeluaran. Tinggi: Apabila user memiliki rasio tabungan terhadap pengeluaran dan rasio hutang terhadap pemasukan yang tidak memenuhi nilai diatas. Berarti keuangan cukup berisiko karena utang yang besar, tabungan rendah, atau pengeluaran berlebihan.
Dari seluruh fitur akan diambil 4 fitur, yaitu AnnualIncome, AnnualExpenses, AnnualLiabilities, dan AnnualSavings. Yang merupakan jumlah pertahun, dari pemasukan, pengeluaran, tabugan, dan pembayaran hutang.
setelah dilakukan pengecekan outlier untuk setiap fiturnya, terdapat outlier yang dapat menggangu proses pemodelannya. Sehingga outlier dapat ditangani dengan menghapus semua outlier dengan IQR.
Agar distribusi data seimbang per labelnya maka diambil 2000 sample per label kategori.
Menggunakan Label Encoder untuk mengonversi variabel target (output) kategori menjadi numerik.
Membagi data menjadi 3 bagian 80% untuk di train dan 20% dibagi untuk test dan val. sehingga ukuran datanya menjadi train=4800; val=600; test=600.
Mengubah skala data sehingga memiliki mean (rata-rata) sebesar 0 dan standar deviasi sebesar 1 serta memastikan bahwa semua fitur memiliki skala yang sama.
Model yang digunakan adalah Neural Network yang digunakan untuk pengklasifikasian dan model ini terdiri dari beberapa layer, sebagai berikut:
- Layer 1:
- Dense layer (unit:256, aktivasi: relu, input shape data, dan regularisasi L2 dengan faktor 0.001 untuk mengurangi overfitting)
- Dropout (dropout rate 20% untuk mengurangi overfitting dengan mematikan secara acak neuron selama proses training).
- Layer 2:
- Dense layer (unit:128, aktivasi: relu, dan regularisasi L2 dengan faktor 0.001 untuk mengurangi overfitting)
- Dropout (dropout rate 20% untuk mengurangi overfitting dengan mematikan secara acak neuron selama proses training).
- Layer 3:
- Dense layer (unit:64, aktivasi: relu, dan regularisasi L2 dengan faktor 0.001 untuk mengurangi overfitting)
- Dropout (dropout rate 20% untuk mengurangi overfitting dengan mematikan secara acak neuron selama proses training).
- Layer 4:
- Dense layer (unit:32, aktivasi: relu, dan regularisasi L2 dengan faktor 0.001 untuk mengurangi overfitting)
- Layer 5:
- Dense layer (unit:3, aktivasi: softmax untuk menghasilkan output berupa probabilitas dari tiga kelas).
Serta dengan konfigurasi pelatihan model:
- Optimizer : Adam dengan learning rate 0.00005 untuk pembaruan bobot yang stabil.
- Loss function: Sparse categorical crossentropy, digunakan karena data target berupa label integer untuk klasifikasi multi-kelas.
- Metrics: Accuracy, untuk mengevaluasi performa model.
- Jumlah Epoch: 50, angka yang cukup untuk melatih model.
- Batch Size : 32, jumlah sampel data yang diproses model sekaligus sebelum memperbarui bobotnya selama pelatihan dalam satu iterasi.
Cara kerja model: Model menerima input berupa vektor numerik dengan panjang yang sama dengan jumlah fitur dalam data. Input ini diproses melalui beberapa dense layer, di mana setiap layer menghitung kombinasi linear dari input, dan menerapkan fungsi aktivasi ReLU. Kemudian, Dropout layer digunakan untuk mencegah overfitting dengan mematikan secara acak beberapa neuron. Output akhir dari model adalah probabilitas untuk setiap kelas, yang dihitung menggunakan fungsi aktivasi softmax.
Model yang digunakan adalah Logistic Regression dari library sklearn. Logistic Regression adalah algoritma supervised learning yang sering digunakan untuk klasifikasi biner maupun multi-kelas. Pada model ini, digunakan pendekatan multi-class one-vs-rest untuk klasifikasi multi-kelas. Dengan parameter:
- multi_class='ovr': Model menggunakan pendekatan one-vs-rest, di mana setiap kelas dibandingkan dengan semua kelas lainnya.
- max_iter=1000: Iterasi maksimum ditetapkan sebanyak 1000 untuk memastikan model memiliki cukup waktu untuk mencapai konvergensi. Cara kerja model: Masukan input data diproyeksikan ke dalam ruang linear dengan menghitung bobot dan bias, kemudian model memprediksi kelas untuk data baru dengan menghitung probabilitas setiap kelas menggunakan fungsi logistik (sigmoid).
Pada proyek ini, digunakan beberapa metrik evaluasi untuk menilai performa model klasifikasi, yaitu Akurasi, Precision, Recall, dan F1-Score.
- Akurasi : Akurasi mengukur persentase prediksi yang benar dari total data. Ini dapat memberikan gambaran umum mengenai seberapa sering model membuat prediksi yang benar.
- Precision mengukur seberapa akurat prediksi positif yang dibuat oleh model, yaitu proporsi dari prediksi yang benar (True Positives) terhadap semua prediksi positif (True Positives + False Positives).
- Recall mengukur seberapa baik model menangkap seluruh data positif yang sebenarnya, yaitu proporsi dari prediksi yang benar (True Positives) terhadap semua data positif yang ada (True Positives + False Negatives).
- F1-Score adalah rata-rata harmonis antara Precision dan Recall. F1-Score memberikan keseimbangan antara kedua metrik ini, yang penting ketika ingin mengoptimalkan baik Precision maupun Recall secara bersamaan.
Hasil Evaluasi Model Berikut ini adalah hasil dari evaluasi dari 3 model berbeda (Neural Network, Regresi Logistik serta Regresi Logistik dengan best parameter). Untuk pengkategori-an label sebagai berikut:
- Kelas 0 untuk risiko keuangan rendah;
- Kelas 1 untuk risiko keuangan sedang; dan
- Kelas 1 untuk risiko keuangan tinggi.
Untuk detail dari hasil evaluasi model sebagai berikut:
-
Neural Network: Akurasi: memberikan akurasi sebesar 98% | Kelas | Precision | Recall | F1-Score | |---------------|---------------|------------|--------------| | Kelas 0 | 96% | 100% | 98% | | Kelas 1 | 99% | 96% | 97% | | Kelas 2 | 99% | 98% | 99% | | Rata-rata | 98% | 98% | 98% |
-
Regresi Logistik Akurasi: memberikan akurasi sebesar 95% | Kelas | Precision | Recall | F1-Score | |---------------|---------------|------------|--------------| | Kelas 0 | 93% | 100% | 96% | | Kelas 1 | 100% | 89% | 94% | | Kelas 2 | 95% | 99% | 97% | | Rata-rata | 96% | 96% | 96% |
-
Regresi Logistik dengan best parameter Akurasi: memberikan akurasi sebesar 98% | Kelas | Precision | Recall | F1-Score | |---------------|---------------|------------|--------------| | Kelas 0 | 93% | 100% | 96% | | Kelas 1 | 100% | 89% | 94% | | Kelas 2 | 95% | 99% | 97% | | Rata-rata | 96% | 96% | 96% |
Dapat dilihat dari hasil diatas, model terbaik adalah Neural Network. Karena selain nilai akurasi yang tinggi 98%, serta nilai metrik evaluasinya yang sangat baik disemua kelas dengan rata-rata 98%.
- Apakah Sudah Menjawab Problem Statement? Ya, solusi yang dirancang berhasil menjawab problem statement.
- Prediksi Risiko Keuangan: Model Neural Network dan Regresi Logistik telah digunakan untuk memprediksi tingkat risiko keuangan berdasarkan data penghasilan, pengeluaran, tabungan, dan utang (pertahun). Dengan akurasi Neural Network mencapai 97.32%, solusi ini memberikan hasil yang sangat andal dalam membedakan tingkat risiko keuangan individu.
- Rekomendasi/Saran Keuangan: Berdasarkan tingkat risiko, sistem memberikan rekomendasi praktis, seperti saran untuk meningkatkan tabungan atau mengurangi pengeluaran, sesuai dengan kebutuhan masing-masing individu.
2. Apakah Berhasil Mencapai Goals yang Diharapkan? Ya, solusi ini berhasil mencapai goals yang telah ditetapkan.
- Model Prediksi: Model Neural Network mencapai akurasi yang cukup tinggi, 97%. Selain itu, model ini menunjukkan metrik evaluasi yang sangat baik pada precision, recall, dan F1-score untuk semua kelas risiko.
- Rekomendasi Keuangan yang Tepat: Sistem rekomendasi berdasarkan hasil prediksi risiko memberikan panduan yang actionable, sehingga individu dapat mengambil langkah strategis untuk mengelola keuangan mereka dengan lebih baik.
3. Apakah Solusi Statement yang Kamu Rencanakan Berdampak? Solusi yang dikembangkan memberikan dampak signifikan dalam beberapa aspek:
- Teknis: Model prediksi memberikan hasil yang andal, sehingga solusi ini relevan untuk diterapkan dalam layanan keuangan. Neural Network menunjukkan performa tinggi untuk klasifikasi risiko, sementara Regresi Logistik memberikan opsi model yang lebih sederhana namun tetap cukup akurat.
- Praktis: Rekomendasi yang dihasilkan memungkinkan individu untuk memahami kondisi keuangan mereka dengan lebih baik dan mengambil tindakan yang sesuai.
Kesimpulan: Model yang dikembangkan telah berhasil menjawab problem statement, mencapai goals yang ditetapkan, dan memberikan dampak nyata terhadap Business Understanding. Dengan implementasi yang lebih lanjut, solusi ini dapat digunakan untuk meningkatkan pengambilan keputusan keuangan baik untuk individu maupun institusi.