File size: 1,947 Bytes
783a372 db547c5 783a372 db547c5 783a372 db547c5 783a372 db547c5 b15461c db547c5 783a372 db547c5 783a372 db547c5 783a372 db547c5 783a372 db547c5 783a372 db547c5 783a372 db547c5 783a372 db547c5 | 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 59 60 61 62 63 64 | import gradio as gr
import numpy as np
import pandas as pd
import tensorflow as tf
from huggingface_hub import hf_hub_download
import os
# No usar GPU (opcional para compatibilidad en HF Spaces)
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
# Cargar modelo desde Hugging Face
model_path = hf_hub_download(
repo_id="Albertwok/btc-price-predictor",
filename="btc_price_model.h5",
repo_type="model"
)
model = tf.keras.models.load_model(model_path, compile=False)
# Cargar datos normalizados y originales
df = pd.read_csv("ENTRENAMIENTO_NORMALIZADO.csv")
df_original = pd.read_csv("ENTRENAMIENTO.csv")
# Añadir columna de fecha
df["fecha"] = pd.to_datetime(df_original[["year", "month", "day"]])
# Calcular media y desviación del target
media_y = df_original["btc-usd_close"].mean()
std_y = df_original["btc-usd_close"].std()
# Función de predicción basada en la fecha más próxima anterior
def predict_price(input_date):
try:
fecha = pd.to_datetime(input_date)
anteriores = df[df["fecha"] < fecha]
if anteriores.empty:
return "❌ No hay datos anteriores a esa fecha."
fila = anteriores.iloc[-1]
# Asegurar que todo sea float32 para el modelo
entrada = fila.drop(["btc-usd_close", "fecha"]).astype(np.float32).to_frame().T
pred_norm = model.predict(entrada)[0][0]
pred_real = pred_norm * std_y + media_y
return f"✅ Predicción para {input_date}: ${pred_real:,.2f}"
except Exception as e:
return f"❌ Error: {e}"
# Interfaz Gradio
demo = gr.Interface(
fn=predict_price,
inputs=gr.Textbox(label="Introduce una fecha (YYYY-MM-DD)", placeholder="Ejemplo: 2023-12-15"),
outputs=gr.Textbox(label="Precio estimado de Bitcoin"),
title="📈 Predicción del Precio de Bitcoin",
description="Basado en la información económica del día anterior más cercano."
)
if __name__ == "__main__":
demo.launch()
|