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