J
JEPRIARISANDI
DEV
•3 months ago
Funny

PT Muhamad garasi kpc

import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier from sklearn.preprocessing import StandardScaler from sklearn.metrics import classification_report, confusion_matrix import warnings warnings.filterwarnings('ignore')

class CreditProblemAnalyzer: def init(self): self.scaler = StandardScaler() self.model = None self.feature_columns = 'jumlah_kredit', 'tenor_bulan', 'bunga_per_tahun', 'keterlambatan_pembayaran', 'jumlah_tunggakan', 'usia_debitur', 'penghasilan_bulanan', 'status_pernikahan', 'jumlah_tanggungan', 'lama_bekerja_tahun'

text
def prepare_data(self, data):
    """Menyiapkan data untuk analisis"""
    # Normalisasi fitur numerik
    numeric_features = ['jumlah_kredit', 'tenor_bulan', 'bunga_per_tahun',
                      'keterlambatan_pembayaran', 'jumlah_tunggakan',
                      'usia_debitur', 'penghasilan_bulanan', 'jumlah_tanggungan',
                      'lama_bekerja_tahun']
    
    data_scaled = data.copy()
    data_scaled[numeric_features] = self.scaler.fit_transform(data[numeric_features])
    
    return data_scaled

def train_model(self, X_train, y_train):
    """Melatih model klasifikasi"""
    self.model = GradientBoostingClassifier(
        n_estimators=100,
        learning_rate=0.1,
        max_depth=5,
        random_state=42
    )
    self.model.fit(X_train, y_train)
    
def predict_risk_level(self, customer_data):
    """Memprediksi tingkat risiko kredit"""
    if self.model is None:
        raise ValueError("Model belum dilatih!")
    
    prediction = self.model.predict(customer_data)
    probability = self.model.predict_proba(customer_data)
    
    risk_levels = {0: "Rendah", 1: "Sedang", 2: "Tinggi"}
    results = []
    
    for i, (pred, prob) in enumerate(zip(prediction, probability)):
        result = {
            'customer_id': i,
            'risk_level': risk_levels.get(pred, "Tidak Diketahui"),
            'confidence': max(prob),
            'probabilities': {
                'rendah': prob[0],
                'sedang': prob[1] if len(prob) > 1 else 0,
                'tinggi': prob[2] if len(prob) > 2 else 0
            }
        }
        results.append(result)
    
    return results

def recommend_solution(self, risk_level, customer_profile):
    """Memberikan rekomendasi solusi berdasarkan tingkat risiko"""
    recommendations = {
        "Rendah": [
            "Restrukturisasi ringan dengan perpanjangan tenor",
            "Penurunan suku bunga sementara",
            "Program pembayaran bertahap"
        ],
        "Sedang": [
            "Restrukturisasi moderat dengan penyesuaian angsuran",
            "Konsolidasi utang dengan kredit baru",
            "Program pengampunan denda sebagian"
        ],
        "Tinggi": [
            "Negosiasi pelunasan dengan diskon",
            "Konversi menjadi kredit jangka panjang",
            "Program penyelesaian khusus dengan jaminan tambahan"
        ]
    }
    
    return recommendations.get(risk_level, ["Konsultasi langsung dengan ahli kredit"])

Contoh penggunaan

def main(): # Data contoh (dalam praktik nyata, ini akan datang dari database) sample_data = pd.DataFrame({ 'jumlah_kredit': 50000000, 100000000, 75000000, 30000000, 'tenor_bulan': 24, 36, 18, 12, 'bunga_per_tahun': 12, 15, 10, 18, 'keterlambatan_pembayaran': 2, 5, 1, 8, 'jumlah_tunggakan': 1, 3, 0, 4, 'usia_debitur': 35, 45, 28, 52, 'penghasilan_bulanan': 8000000, 15000000, 5000000, 12000000, 'status_pernikahan': 1, 1, 0, 1, # 1: Menikah, 0: Single 'jumlah_tanggungan': 2, 3, 0, 1, 'lama_bekerja_tahun': 5, 10, 2, 15 })

text
analyzer = CreditProblemAnalyzer()
processed_data = analyzer.prepare_data(sample_data)

print("=== Analisis Kredit Bermasalah ===")
print(f"Data yang dianalisis: {len(sample_data)} nasabah")
print("\nFitur yang digunakan:")
for feature in analyzer.feature_columns:
    print(f"- {feature}")

if name == "main": main() { "id_registrasi": "REG-10293847", "identitas_kendaraan": { "nomor_registrasi": "BE 1234 ABC", "nomor_rangka": "MHKA1B2C3DE456789", "nomor_mesin": "K15G-987654", "merek": "Honda", "tipe": "CB150R", "jenis": "Sepeda Motor", "model": "Solo", "tahun_pembuatan": 2022, "silinder": "150 cc", "warna": "Hitam", "bahan_bakar": "Bensin" }, "identitas_pemilik": { "nik": "1801xxxxxxxxxxxx", "

314.8k
JEPRIARISANDI
DEV
OP
·3 months ago

{ "id_registrasi": "REG-10293847", "identitas_kendaraan": { "nomor_registrasi": "BE 1234 ABC", "nomor_rangka": "MHKA1B2C3DE456789", "nomor_mesin": "K15G-987654", "merek": "Honda", "tipe": "CB150R", "jenis": "Sepeda Motor", "model": "Solo", "tahun_pembuatan": 2022, "silinder": "150 cc", "warna": "Hitam", "bahan_bakar": "Bensin" }, "identitas_pemilik": { "nik": "1801xxxxxxxxxxxx", "nama_lengkap": "Jefri Arisandi", "alamat": "Gedong Tataan, Pesawaran, Lampung", "nomor_telepon": "081234567890" }, "status_pajak": { "nilai_jual_kendaraan_bermotor": 22000000, "pajak_pokok": 250000, "swdkllj": 35000, "total_pajak_tahunan": 285000, "tanggal_jatuh_tempo": "2027-05-15", "status_pembayaran": "LUNAS", "blokir_status": "TIDAK BLOKIR" }, "riwayat_registrasi": [ { "tanggal_transaksi": "2026-05-15", "jenis_layanan": "Pajak Tahunan", "lokasi_samsat": "SAMSAT Pesawaran", "status": "Selesai" } ] }

JEPRIARISANDI
DEV
OP
·3 months ago

tanggal_jatuh_tempo": "2027-05-15", "status_pembayaran": "LUNAS", "blokir_status": "TIDAK BLOKIR" }, "riwayat_registrasi": [ { "tanggal_transaksi": "2026-05-15", "jenis_layanan": "Pajak Tahunan", "lokasi_samsat": "SAMSAT Pesawaran", "status": "Selesai"

JEPRIARISANDI
DEV
OP
·3 months ago

tanggal_jatuh_tempo": "2027-05-15", "status_pembayaran": "LUNAS", "blokir_status": "TIDAK BLOKIR" }, "riwayat_registrasi": [ { "tanggal_transaksi": "2026-05-15", "jenis_layanan": "Pajak Tahunan", "lokasi_samsat": "SAMSAT Pesawaran", "status": "Selesai"