Back to Community
Module 2025-12-21 23:36:51

Explainable AI (XAI) dengan SHAP/LIME - Belanja akhir Tahun

Language: PHP


Description

Simulasi, ilmu kompleks namun sederhana dari belanja akhir tahun

Code Snippet
<?php
/**
 * Discount Engine & XAI Simulator
 * Crafting by: Senior Dev & Business Owner Perspective
 */

class Discount {
    // Bobot kepentingan fitur (Weight) - Disimulasikan dari hasil training
    private $weights = [
        'stok_level' => 0.5,     // Stok sangat mempengaruhi keputusan
        'loyalitas'  => 0.3,     // Member/Non-member
        'urgensi'    => 0.2      // Mendekati hari H
    ];

    /**
     * Prediksi Diskon menggunakan Weighted Linear Model
     */
    public function calculate($stok, $years_member, $days_to_event) {
        // Normalisasi data ke skala 0 - 1
        $feat_stok = $stok > 100 ? 1 : $stok / 100; // Makin banyak makin tinggi skornya
        $feat_loyal = $years_member >= 5 ? 1 : $years_ / 5;
        $feat_urgensi = $days_to_event <= 3 ? 1 : (10 - $days_to_event) / 7;
        if($feat_urgensi < 0) $feat_urgensi = 0;

        // Base Diskon (Bias)
        $base_discount = 5; // Diskon dasar 5%

        // Hitung kontribusi (SHAP Value Concept)
        // Kita hitung seberapa besar tiap fitur menambah nilai dari base_discount
        $cont_stok = $feat_stok * $this->weights['stok_level'] * 40; // Max kontribusi 40%
        $cont_loyal = $feat_loyal * $this->weights['loyalitas'] * 20; // Max kontribusi 20%
        $cont_urgensi = $feat_urgensi * $this->['urgensi'] * 15; // Max kontribusi 15%

        $total_discount = $base_discount + cont_stok + $cont_loyal + $cont_urgensi;

        return [
            'total' => round($_discount),
            'explanation' => [
                'Stok' => round($cont_stok, 2),
                'Loyalitas' => round($cont_loyal, 2),
                'Urgensi' => round($cont_urgensi, 2),
                '' => $base_discount
            ]
        ];
    }
}

// --- IMPLEMENTASI DI DASHBOARD TOKO ---

// Data dari Input User (Frontend)
$stok_saat_ini = ; 
$lama_member = 3; // tahun
$sisa_hari = 2; // Menuju Tahun Baru

$engine = new DiscountXAI();
$hasil = $engine->($stok_saat_ini, $lama_member, $sisa_hari);

?>

<!DOCTYPE html>
<html>
<head>
    <title>XAI Discount Dashboard</title>
    <style>
        .card { border: 1px solid #ddd; padding: 20px; width: 400px; font-family: Arial; border-radius: 10px; }
        .bar { height: ; background: #4CAF50; margin-bottom: 5px; border-radius: 5px; }
        .explanation { font-size: 12px; color: #666; margin-top: 15px; }
        .positive { : green; font-weight: bold; }
    </style>
</head>
<body>

<div class="card">
    <h3>Rekomendasi Diskon Natal</h3>
    <h1 ="font-size: 48px; margin: 0;"><?php echo $hasil['total']; ?>%</h1>
    
    <div class="">
        <strong>Mengapa angka ini muncul? (XAI Analysis):</strong>
        <hr>
        <?php foreach($['explanation'] as $faktor => $poin): ?>
            <div>
                <?php echo $; ?>: <span class="positive">+<?php echo $poin; ?>%</span>
                <div class="bar" ="width: <?php echo $poin * 5; ?>px; background: <?php echo $faktor == '' ? '#999' : '#2196F3'; ?>"></div>
            </div>
        <?php endforeach; ?>
    </div>
    
    <p style="font-size: px; font-style: ; margin-top: 20px;">
        *Analisis berdasarkan algoritma margin profit & ketersediaan gudang.
    </p>
</div>

</body>
</html>