英文:
Why Streamlit does not show me my model prediction?
问题
我正在构建一个Streamlit应用程序,以进行欺诈预测。思路是当用户输入所需信息时,应用程序会显示交易是否是欺诈。然而,每次尝试时,它都不显示任何预测,而是返回到主页。下面是我的代码:
if col2.button('Manual Data Entry'):
# Within the context of the form
with st.form('Manual Data Entry'):
# Transaction day selection
day = st.slider('Transaction Day', 1, 31)
# Input box for hours
hour = st.slider('Transaction Hour', 1, 24)
# Input box for amount
amount = st.number_input('Transaction Amount', min_value=1)
# Input box for cash withdrawal
type_CASH_OUT = st.radio("Is it a cash withdrawal?", ('Yes', 'No'))
# Input box for transfers
type_TRANSFER = st.radio("Is it a transfer?", ('Yes', 'No'))
# Input box for who initiates the transaction
nameorig_C = st.radio("Who initiates the transaction?", ('Customer', 'Merchant'))
# Input box for beneficiary
namedest_C = st.radio("Is the beneficiary another customer?", ('Yes', 'No'))
# Input box for beneficiary
namedest_M = st.radio("Is the beneficiary a merchant?", ('Yes', 'No'))
submitted = st.form_submit_button("Submit")
if submitted:
X_test = pd.DataFrame({
'day': [day],
'hour': [hour],
'amount': [amount],
'type_CASH_OUT': [type_CASH_OUT],
'type_TRANSFER': [type_TRANSFER],
'nameorig_C': [nameorig_C],
'namedest_C': [namedest_C],
'namedest_M': [namedest_M]
})
# Print test data
st.write("Test Data:")
st.write(X_test)
# 2. Perform data transformations
# Load PCA and scaler
pca_path = 'C:/Users/lydia/OneDrive/Escritorio/Proyecto final_fraude/src/modelos/pca.pkl'
scaler_path = 'C:/Users/lydia/OneDrive/Escritorio/Proyecto final_fraude/src/modelos/scaler.pkl'
# Scale
scaler = pickle.load(open(scaler_path, 'rb'))
scaled_X_test = scaler.transform(X_test)
# PCA
pca = pickle.load(open(pca_path, 'rb'))
X_test_pca = pd.DataFrame(pca.transform(scaled_X_test), columns=['PC1', 'PC2', 'PC3', 'PC4', 'PC5'])
# Print transformed data
st.write("Transformed Data (X_test_pca):")
st.write(X_test_pca)
# 3. Load the model and other related objects
my_model = pickle.load(open('C:/Users/lydia/OneDrive/Escritorio/Proyecto final_fraude/src/modelos/my_model.pkl', 'rb'))
# 4. Make predictions using the model and transformed data
y_pred = my_model.predict(X_test_pca)
# Print the prediction
st.write("Prediction (y_pred):")
st.write(y_pred)
# Get the prediction label
prediction_label = "It's a fraudulent transaction" if y_pred[0] == 1 else "It's a safe transaction"
# Show the prediction result to the user
st.write("Prediction Result:", prediction_label)
我尝试了不同的方法,在"if submitted:"之后注释整个代码,以检查是否可以打印"谢谢"之类的内容,但没有成功。
英文:
I'm building a Streamlit app in order to make fraud predictions. The idea is that when the user inputs the requested information, the app shows the if the transaction is a fraud or not.However, every time I try it, it does not show me any predictions, but it returns to the main page instead. Below you can see my code :
`if col2.button('Entrada manual de datos'):
# Dentro del contexto del formulario
with st.form('Entrada manual de datos'):
# Selección del día de la transacción
day = st.slider('Día de la transacción', 1, 31)
# Caja de entrada para números
hour = st.slider('Hora de la transacción', 1, 24)
# Caja de entrada para cantidad
amount = st.number_input('Cantidad de la transacción', min_value=1)
# Caja de entrada para retirada de fondos
type_CASH_OUT = st.radio("¿Es una retirada de fondos?", ('Sí', 'No'))
# Caja de entrada para transferencias
type_TRANSFER = st.radio("¿Es una transferencia?", ('Sí', 'No'))
# Caja de entrada para quien inicia la transacción
nameorig_C = st.radio("¿Quién origina la transacción?", ('Cliente', 'Comercio'))
# Caja de entrada para beneficiario
namedest_C = st.radio("¿El beneficiario de la transacción es otro cliente?", ('Sí', 'No'))
# Caja de entrada para beneficiario
namedest_M = st.radio("¿El beneficiario de la transacción es un comercio?", ('Sí', 'No'))
submitted = st.form_submit_button("Submit")
if submitted:
X_test = pd.DataFrame({
'day': [day],
'hour': [hour],
'amount': [amount],
'type_CASH_OUT': [type_CASH_OUT],
'type_TRANSFER': [type_TRANSFER],
'nameorig_C': [nameorig_C],
'namedest_C': [namedest_C],
'namedest_M': [namedest_M]
})
# Imprimir los datos de prueba
st.write("Datos de prueba:")
st.write(X_test)
# 2. Realizar transformaciones de los datos
# Cargamos el PCA y el scaler
ruta_pca = 'C:/Users/lydia/OneDrive/Escritorio/Proyecto final_fraude/src/modelos/pca.pkl'
ruta_scaler = 'C:/Users/lydia/OneDrive/Escritorio/Proyecto final_fraude/src/modelos/scaler.pkl'
# Escalamos
scaler = pickle.load(open(ruta_scaler, 'rb'))
scaled_X_test = scaler.transform(X_test)
# PCA
pca = pickle.load(open(ruta_pca, 'rb'))
X_test_pca = pd.DataFrame(pca.transform(scaled_X_test), columns=['PC1', 'PC2', 'PC3', 'PC4', 'PC5'])
# Imprimir los datos transformados
st.write("Datos transformados (X_test_pca):")
st.write(X_test_pca)
# 3. Cargar el modelo y otros objetos relacionados
my_model = pickle.load(open('C:/Users/lydia/OneDrive/Escritorio/Proyecto final_fraude/src/modelos/my_model.pkl', 'rb'))
# 4. Realizar predicción utilizando el modelo y los datos transformados
y_pred = my_model.predict(X_test_pca)
# Imprimir la predicción
st.write("Predicción (y_pred):")
st.write(y_pred)
# Obtener la etiqueta de predicción
prediction_label = "Es una transacción fraudulenta" if y_pred[0] == 1 else "Es una transacción segura"
# Mostrar el resultado de la predicción al usuario
st.write("Resultado de la predicción:", prediction_label)`
I've tried different to comment the whole code after " if submitted:" to check if it could print like "thank you", but it couldn't.
答案1
得分: 1
根据我对你的代码的猜测,submitted
对象在一个代码块中被定义(因为代码行有缩进),是吗?
如果是这样的话,你需要使用 session_state。
尝试替换:
submitted = st.form_submit_button("Submit")
if submitted:
为:
st.session_state["submitted"] = st.form_submit_button("Submit")
if st.session_state["submitted"]:
英文:
From what I can guess in your code, submitted
object is defined in a block (as lines are indented), right ?
If that's the case, you need to use session_state.
Try to replace:
submitted = st.form_submit_button("Submit")
if submitted:
by:
st.session_state["submitted"] = st.form_submit_button("Submit")
if st.session_state["submitted"]:
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论