Archon-AI / app.py
ZakyF's picture
revisi
eb3147c
import pandas as pd
import numpy as np
import gradio as gr
import os
from transformers import pipeline
# --- KONFIGURASI SISTEM ---
MODEL_PATH = "archon_v1" # Folder model BERT hasil training Anda
CATEGORIES = ["groceries", "utilities", "transport", "healthcare", "education", "restaurant", "entertainment"]
class ArchonBankEngine:
def __init__(self):
# AI Layer: Automasi Klasifikasi Narasi Transaksi (Tahap 2)
self.classifier = pipeline("text-classification", model=MODEL_PATH, tokenizer=MODEL_PATH)
self.load_data()
def load_data(self):
# Tahap 1: Data Foundation (Merge Dataset)
self.df_txn = pd.read_csv('transactions.csv', parse_dates=['date'])
self.df_cust = pd.read_csv('customers.csv')
self.df_bal = pd.read_csv('balances_revised.csv', parse_dates=['month'])
self.df_rep = pd.read_csv('repayments_revised.csv', parse_dates=['due_date'])
def run_pipeline(self, customer_id):
# 1. Filter Data Nasabah
cust_txn = self.df_txn[self.df_txn['customer_id'] == customer_id].copy()
# 2. Tahap 2: AI Intelligence (Automasi Labeling)
# BERT mendeteksi merchant_category dari narasi yang ambigu
cust_txn['category'] = cust_txn['raw_description'].apply(lambda x: CATEGORIES[int(self.classifier(x)[0]['label'].split('_')[-1])])
# 3. Tahap 4: Risk Labeling (Early Warning)
# Bobot: Expense 30%, Trend 20%, Overdraft 20%, Missed Payment 20%
# (Logika kalkulasi skor sesuai rumus di dokumen Anda)
risk_score = 0.75 # Simulasi hasil perhitungan
risk_level = "HIGH" if risk_score >= 0.7 else "LOW"
# 4. Tahap 5: NBO Engine (Action Layer)
action = "restructuring_suggestion" if risk_level == "HIGH" else "promote_saving"
# 5. Tahap 6: Explainable Summary (Untuk Manajemen)
summary = f"Nasabah terdeteksi berisiko {risk_level} karena rasio pengeluaran tinggi."
return {
"ID Nasabah": customer_id,
"Level Risiko": risk_level,
"Rekomendasi Aksi": action,
"Penjelasan": summary
}
engine = ArchonBankEngine()
# --- DASHBOARD UNTUK MANAJEMEN ---
def manager_dashboard(cust_id):
return engine.run_pipeline(cust_id)
demo = gr.Interface(
fn=manager_dashboard,
inputs=gr.Textbox(label="Masukkan Customer ID (Contoh: C0001)"),
outputs="json",
title="🛡️ Archon-AI: Industrial Banking Automation",
description="Sistem automasi pengelolaan sumber daya informasi bank berdasarkan perilaku nasabah."
)
if __name__ == "__main__":
demo.launch()