[Python] FastAPI: Internal Server Error when returning ML model prediction

Discussão em 'Python' iniciado por Stack, Fevereiro 28, 2025.

  1. Stack

    Stack Membro Participativo

    I would like to test my pipeline in FastAPI, but I can't find the mistake in my code. When I test it using the Visual Studio Code (using a print() statement), it works. However, when I try accessing the endpoint through the browser, I get Internal Server Error. It works when I return something else as the prediction results (e.g., some string), instead of the actual prediction results.

    Here is my code:

    class FraudDetection333(BaseModel):
    """
    Input features validation for the ML model
    """
    user_id: int
    signup_day: int
    signup_month: int
    signup_year: int
    purchase_day: int
    purchase_month: int
    purchase_year: int
    purchase_value: float
    source: str
    browser: str
    sex: str
    age: int

    @api.post("/predictions_test",tags=['DecisionTreeClassifier'])
    def predictions_test(fraud:FraudDetection333):
    """
    :param:input data from the post request
    :return predicted type
    """
    features = [[
    fraud.user_id,
    fraud.signup_day,
    fraud.signup_month,
    fraud.signup_year,
    fraud.purchase_day,
    fraud.purchase_month,
    fraud.purchase_year,
    fraud.purchase_value,
    fraud.source,
    fraud.browser,
    fraud.sex,
    fraud.age
    ]]
    rf_model = joblib.load('./rf_model.pkl')
    new = (pd.DataFrame(features, index = ['0'], columns = ['user_id','signup_day',
    'signup_month', 'signup_year',
    'purchase_day', 'purchase_month', 'purchase_year','purchase_value',
    'source','browser','sex','age']))
    new_prediction = rf_model.predict(new)
    return {
    "Predicted transaction(1 - fraud, 0 - not fraud)": new_prediction
    }


    If I try the below (using a print() statement), it prints out the expected outcome:

    featuress={
    "user_id": 22058,
    "signup_day": 24,
    "signup_month": 2,
    "signup_year": 2015,
    "purchase_day": 18,
    "purchase_month": 4,
    "purchase_year": 2015,
    "purchase_value": 34,
    "source": "SEO",
    "browser": "Chrome",
    "sex": "M",
    "age": 39
    }
    rf_model = joblib.load('./rf_model.pkl')
    new = (pd.DataFrame(featuress, index = ['0'], columns = ['user_id','signup_day',
    'signup_month', 'signup_year',
    'purchase_day', 'purchase_month', 'purchase_year','purchase_value',
    'source','browser','sex','age']))
    new_prediction = rf_model.predict(new)
    print(new)
    print(new_prediction)


    If I type return {"Predicted transaction(1 - fraud, 0 - not fraud)": 'Hi'}, it also works. Image here.

    Continue reading...

Compartilhe esta Página