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()