dystopianfoe commited on
Commit
75b9781
·
verified ·
1 Parent(s): 20bc805

Upload folder using huggingface_hub

Browse files
Files changed (3) hide show
  1. Dockerfile +0 -3
  2. app.py +26 -26
  3. requirements.txt +6 -10
Dockerfile CHANGED
@@ -10,7 +10,4 @@ COPY . .
10
  RUN pip install --no-cache-dir --upgrade -r requirements.txt
11
 
12
  # Define the command to start the application using Gunicorn with 4 worker processes
13
- # - `-w 4`: Uses 4 worker processes for handling requests
14
- # - `-b 0.0.0.0:7860`: Binds the server to port 7860 on all network interfaces
15
- # - `app:app`: Runs the Flask app (assuming `app.py` contains the Flask instance named `app`)
16
  CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:7860", "app:churn_predictor_api"]
 
10
  RUN pip install --no-cache-dir --upgrade -r requirements.txt
11
 
12
  # Define the command to start the application using Gunicorn with 4 worker processes
 
 
 
13
  CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:7860", "app:churn_predictor_api"]
app.py CHANGED
@@ -16,11 +16,11 @@ def home():
16
  # Define an endpoint to predict for single customer
17
  @churn_predictor_api.post('/v1/customer')
18
  def predict_churn():
19
- # Get JSON data from the request
20
- customer_data = request.get_json()
21
 
22
- # Extract the relevant customer features from the input data
23
- sample = {
24
  'CreditScore': customer_data['CreditScore'],
25
  'Geography': customer_data['Geography'],
26
  'Age': customer_data['Age'],
@@ -32,39 +32,39 @@ def predict_churn():
32
  'EstimatedSalary': customer_data['EstimatedSalary']
33
  }
34
 
35
- # Convert the extracted data into a dataframe
36
- input_data = pd.DataFrame([sample])
37
 
38
- # Make predictions using the trained model
39
- prediction = model.predict(input_data).tolist()[0]
40
 
41
- # Map prediction result to a human readable label
42
- prediction_label = "Churn" if prediction == 1 else "Not Churn"
43
 
44
- # Return the prediction as a JSON response
45
- return jsonify({"Prediction": prediction_label})
46
 
47
  # Define an endpoint to predict for a batch of customers
48
  @churn_predictor_api.post('/v1/customerbatch')
49
  def predict_churn_batch():
50
- # Get the uploaded csv file from the request
51
- file = request.files['file']
52
 
53
- # Read the file into a dataframe
54
- input_data = pd.read_csv(file)
55
 
56
- # Make predictions to the batch data and convert raw predictions into a readable formate
57
- predictions = [
58
- 'Churn' if x == 1
59
- else 'Not Churn'
60
- for x in model.predict(input_data.drop("CustomerId", axis=1)).tolist()
61
- ]
62
 
63
- cust_id_list = input_data.CustomerId.tolist()
64
- output_dict = dict(zip(cust_id_list, predictions))
65
 
66
- return output_dict
 
67
 
68
  # Run the flask app in debug mode
69
  if __name__ == "__main__":
70
- churn_predictor_api.run(debug=True)
 
16
  # Define an endpoint to predict for single customer
17
  @churn_predictor_api.post('/v1/customer')
18
  def predict_churn():
19
+ # Get JSON data from the request
20
+ customer_data = request.get_json()
21
 
22
+ # Extract the relevant customer features from the input data
23
+ sample = {
24
  'CreditScore': customer_data['CreditScore'],
25
  'Geography': customer_data['Geography'],
26
  'Age': customer_data['Age'],
 
32
  'EstimatedSalary': customer_data['EstimatedSalary']
33
  }
34
 
35
+ # Convert the extracted data into a dataframe
36
+ input_data = pd.DataFrame([sample])
37
 
38
+ # Make predictions using the trained model
39
+ prediction = model.predict(input_data).tolist()[0]
40
 
41
+ # Map prediction result to a human readable label
42
+ prediction_label = "Churn" if prediction == 1 else "Not Churn"
43
 
44
+ # Return the prediction as a JSON response
45
+ return jsonify({"Prediction": prediction_label})
46
 
47
  # Define an endpoint to predict for a batch of customers
48
  @churn_predictor_api.post('/v1/customerbatch')
49
  def predict_churn_batch():
50
+ # Get the uploaded csv file from the request
51
+ file = request.files['file']
52
 
53
+ # Read the file into a dataframe
54
+ input_data = pd.read_csv(file)
55
 
56
+ # Make predictions to the batch data and convert raw predictions into a readable format
57
+ predictions = [
58
+ 'Churn' if x == 1 else 'Not Churn'
59
+ for x in model.predict(input_data.drop("CustomerId", axis=1)).tolist()
60
+ ]
 
61
 
62
+ cust_id_list = input_data.CustomerId.tolist()
63
+ output_dict = dict(zip(cust_id_list, predictions))
64
 
65
+ # CRITICAL FIX: Return JSON response
66
+ return jsonify(output_dict)
67
 
68
  # Run the flask app in debug mode
69
  if __name__ == "__main__":
70
+ churn_predictor_api.run(debug=True)
requirements.txt CHANGED
@@ -1,11 +1,7 @@
1
- pandas==2.2.2
2
- numpy==2.0.2
3
- scikit-learn==1.6.1
4
- xgboost==2.1.4
5
- joblib==1.4.2
6
- Werkzeug==2.2.2
7
- flask==2.2.2
8
  gunicorn==20.1.0
9
- requests==2.28.1
10
- uvicorn[standard]
11
- streamlit==1.43.2
 
1
+ pandas==2.0.3
2
+ numpy==1.24.3
3
+ scikit-learn==1.3.0
4
+ xgboost==1.7.6
5
+ joblib==1.3.2
6
+ flask==2.3.3
 
7
  gunicorn==20.1.0