File size: 1,980 Bytes
42c78bd d566c25 0290183 7c127d4 42c78bd 7c127d4 0290183 d566c25 7c127d4 d566c25 7c127d4 d566c25 7c127d4 d566c25 e406ffb 7c127d4 2a17517 7c127d4 e406ffb 7c127d4 e406ffb d566c25 7c127d4 0290183 7c127d4 0290183 7c127d4 0290183 d566c25 0290183 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
import torch
import numpy as np
from transformers import pipeline
from sklearn.preprocessing import MinMaxScaler
def predict_umkm(data, prediction_length=7, safety_stock=10):
device = "cuda" if torch.cuda.is_available() else "cpu"
try:
# ===== 1. Persiapan Data =====
scaler = MinMaxScaler()
scaled_demand = scaler.fit_transform(data[['demand']]).flatten().tolist()
# ===== 2. Prediksi dengan Chronos-T5 =====
chronos = pipeline(
"text-generation",
model="amazon/chronos-t5-small",
device=device
)
# Format prompt khusus time series
prompt = f"""
[INSTRUCTION]
Berikan rekomendasi manajemen inventori untuk {prediction_length} hari ke depan:
- Data historis demand: {scaled_demand[-100:]} # Ambil 100 data terakhir
- Stok saat ini: {data['supply'].iloc[-1]}
- Safety stock: {safety_stock}
[FORMAT]
1 kalimat dalam Bahasa Indonesia dengan angka konkret
Estimasi ROI dalam persentase
[/FORMAT]
"""
# Generate rekomendasi
response = chronos(
prompt,
max_new_tokens=100,
temperature=0.7
)[0]['generated_text']
# Ekstrak teks rekomendasi
rekomendasi = response.split("[/FORMAT]")[-1].strip()
# ===== 3. Simulasi ROI ===== (Contoh Sederhana)
avg_demand = np.mean(data['demand'][-30:])
roi = round((avg_demand * 0.2) / (data['supply'].iloc[-1] + safety_stock) * 100, 1)
return {
"rekomendasi": rekomendasi,
"prediksi": [avg_demand] * prediction_length, # Contoh prediksi
"roi": roi,
"stok_optimal": int(avg_demand * 1.2) + safety_stock,
"anomali": len(data) - len(clean_data(data))
}
except Exception as e:
return {"error": str(e)} |