Post Image

আমি XGBoost ব্যবহার করে একটি রিয়েল-টাইম গ্রাহক হারানোর পূর্বাভাস মডেল তৈরি করেছি: সম্পূর্ণ পাইথন কোড এবং ডেপ্লয়মেন্ট ওয়াকথ্রু


১. পরিচিতি: রিয়েল-টাইম গ্রাহক হারানোর (Churn) ব্যবসায়িক দিক

গ্রাহক হারানো (Customer Churn)—যে হারে গ্রাহকরা একটি পণ্য বা পরিষেবা ব্যবহার করা বন্ধ করে দেন—তা একটি কোম্পানির রাজস্বের উপর সরাসরি প্রভাব ফেলে এমন একটি গুরুত্বপূর্ণ মেট্রিক। রিয়েল-টাইমে ঝুঁকিপূর্ণ গ্রাহকদের চিহ্নিত করার মাধ্যমে ব্যবসাগুলো সক্রিয়ভাবে গ্রাহক ধরে রাখার কৌশল (যেমন ব্যক্তিগত অফার বা ডিসকাউন্ট) প্রয়োগ করতে পারে। এই প্রকল্পটি XGBoost ব্যবহার করে একটি এন্ড-টু-এন্ড মেশিন লার্নিং পাইপলাইন বর্ণনা করে, যা গ্রাহক হারানোর পূর্বাভাস দেয় এবং তাৎক্ষণিক ব্যবসায়িক অন্তর্দৃষ্টির জন্য মডেলটিকে একটি স্কেলযোগ্য API হিসাবে ডেপ্লয় করে।


২. পর্ব ১: পাইথন এবং XGBoost সহ মডেল ডেভেলপমেন্ট

ডেটা ক্লিনজিং এবং ফিচার ইঞ্জিনিয়ারিং

প্রথম ধাপটি হলো ডেটা প্রস্তুতি। সাধারণত, এর জন্য Telco Customer Churn ডেটাসেট (বা অনুরূপ লেনদেনের ডেটা) ব্যবহার করা হয়। পাইথনে (Pandas এবং NumPy ব্যবহার করে) প্রধান পদক্ষেপগুলি হলো:

  1. মিসিং ডেটা হ্যান্ডলিং: অনুপস্থিত ডেটা পয়েন্টগুলি প্রতিস্থাপন বা অপসারণ করা।
  2. ক্যাটেগরিক্যাল ভ্যারিয়েবল এনকোডিং: 'Contract Type' বা 'Internet Service'-এর মতো বৈশিষ্ট্যগুলিকে One-Hot Encoding (pd.get_dummies) বা Label Encoding ব্যবহার করে সংখ্যাসূচক ফর্ম্যাটে রূপান্তর করা।
  3. ফিচার ইঞ্জিনিয়ারিং: ChargesPerMonth বা TenureGroups-এর মতো অত্যন্ত পূর্বাভাসমূলক বৈশিষ্ট্য তৈরি করা, যা প্রায়শই গ্রাহকের আচরণের গভীর প্যাটার্ন প্রকাশ করে।


অসামঞ্জস্যপূর্ণ ডেটা হ্যান্ডলিং (SMOTE/Scale_pos_weight)

গ্রাহক হারানোর ডেটাসেটগুলি সাধারণত অত্যন্ত অসামঞ্জস্যপূর্ণ (যেমন, $80\%$ নন-চার্নার বনাম $20\%$ চার্নার)। XGBoost মডেল যাতে সংখ্যাগরিষ্ঠ শ্রেণীর প্রতি পক্ষপাতদুষ্ট না হয়, তা নিশ্চিত করার জন্য:

  1. সংখ্যালঘু শ্রেণীকে (চার্নারদের) ভুল শ্রেণীবদ্ধ করার জন্য উচ্চতর পেনাল্টি (penalty) দিতে XGBClassifier-এর মধ্যে scale_pos_weight হাইপারপ্যারামিটারটি ব্যবহার করুন।
  2. বিকল্পভাবে, imblearn লাইব্রেরি ব্যবহার করে প্রশিক্ষণ সেটে SMOTE (Synthetic Minority Over-sampling Technique) প্রয়োগ করুন।


হাইপারপ্যারামিটার টিউনিং এবং মূল্যায়ন

প্রক্রিয়াকৃত বৈশিষ্ট্য ব্যবহার করে XGBoost মডেলটিকে প্রশিক্ষণ দেওয়া হয়। মূল্যায়ন শুধুমাত্র নির্ভুলতা (Accuracy) (যা অসামঞ্জস্যপূর্ণ ডেটাতে বিভ্রান্তিকর হতে পারে) এর উপর নয়, বরং রিকল (Recall) (প্রকৃত চার্নারদের সঠিকভাবে সনাক্ত করা) এবং F1-Score (যথার্থতা এবং রিকলের হারমোনিক গড়) এর উপরও দৃষ্টি নিবদ্ধ করে। হাইপারপ্যারামিটার টিউনিং (RandomizedSearchCV বা Optuna ব্যবহার করে) সর্বোত্তম সম্ভাব্য F1-Score-এর জন্য max_depth, learning_rate, এবং n_estimators-এর মতো প্যারামিটারগুলি অপটিমাইজ করার জন্য অপরিহার্য।


৩. পর্ব ২: রিয়েল-টাইম প্রেডিকশনের জন্য ডেপ্লয়মেন্ট

রিয়েল-টাইম পূর্বাভাস অর্জন করতে, প্রশিক্ষিত মডেলটিকে অবশ্যই পাইথনের pickle বা joblib ব্যবহার করে সংরক্ষণ (serialized) করতে হবে এবং একটি লো-ল্যাটেন্সি ওয়েব API এর মাধ্যমে পরিবেশন করতে হবে।


FastAPI/Flask API কাঠামো

আমরা একটি RESTful API এন্ডপয়েন্ট তৈরি করতে FastAPI (বা Flask) ব্যবহার করি। মূল কাঠামোতে নিম্নলিখিত বিষয়গুলি অন্তর্ভুক্ত:

  1. মডেল লোডিং: অ্যাপ্লিকেশন শুরুর সময় সংরক্ষিত .pkl বা .joblib মডেল আর্টিফ্যাক্ট লোড করা।
  2. এন্ডপয়েন্ট সংজ্ঞা: একটি POST এন্ডপয়েন্ট (/predict_churn-এর মতো) তৈরি করা যা JSON ফর্ম্যাটে নতুন গ্রাহক ডেটা (বৈশিষ্ট্য) গ্রহণ করে।
  3. ইনফারেন্স পাইপলাইন: এন্ডপয়েন্ট ফাংশনের মধ্যে, কাঁচা JSON ইনপুটটি প্রশিক্ষণের সময় ব্যবহৃত ঠিক একই প্রিপ্রসেসিং ধাপের (এনকোডিং, স্কেলিং ইত্যাদি) মধ্য দিয়ে যায় এবং তারপর ভবিষ্যদ্বাণীর জন্য লোড করা XGBoost মডেলে ফিড করা হয়।

ইনফারেন্স পাইপলাইন তৈরি করা (সরলীকৃত পাইথন স্নিপেট)


Python


from fastapi import FastAPI
import joblib
import pandas as pd

app = FastAPI()
# মডেল এবং প্রিপ্রসেসিং টুল লোড করুন
model = joblib.load("xgb_churn_model.joblib")
encoders = joblib.load("encoders.joblib")

@app.post("/predict_churn")
async def predict_churn(customer_data: dict):
# 1. JSON-কে ডেটাফ্রেম-এ রূপান্তর করুন
df = pd.DataFrame([customer_data])
# 2. ঠিক একই প্রিপ্রসেসিং প্রয়োগ করুন (One-Hot Encoding, ইত্যাদি)
# দ্রষ্টব্য: প্রিপ্রসেসিং লজিক প্রশিক্ষণের মতোই হতে হবে!
processed_df = apply_preprocessing(df, encoders)
# 3. সম্ভাব্যতার পূর্বাভাস দিন (রিয়েল-টাইম প্রেডিকশন)
churn_proba = model.predict_proba(processed_df)[:, 1][0]
# 4. ব্যবসায়িক থ্রেশহোল্ড প্রয়োগ করুন (যেমন, 0.4)
prediction = 1 if churn_proba >= 0.4 else 0
return {"churn_probability": churn_proba, "prediction": prediction}


৪. পর্ব ৩: ডকার এবং স্কেলেবিলিটি সহ প্রোডাকশনাইজেশন


ডকার সহ কন্টেইনারাইজেশন

ধারাবাহিক এবং স্কেলযোগ্য ডেপ্লয়মেন্টের জন্য, সম্পূর্ণ অ্যাপ্লিকেশনটি (FastAPI কোড, XGBoost মডেল ফাইল, প্রিপ্রসেসিং লজিক এবং নির্ভরতা) Docker ব্যবহার করে একটি একক ইউনিটে একত্রিত করা হয়। Dockerfile পাইথন পরিবেশকে নির্দিষ্ট করে, অ্যাপ্লিকেশন ফাইলগুলি কপি করে এবং স্টার্টআপ কমান্ডকে সংজ্ঞায়িত করে। এই কন্টেইনারটি তারপর AWS Fargate, Google Cloud Run বা Kubernetes-এর মতো ক্লাউড পরিষেবাগুলিতে নির্ভরযোগ্যভাবে ডেপ্লয় করা যেতে পারে।


রিয়েল-টাইম মনিটরিং এবং রিট্রেনিং

একটি প্রোডাকশন-রেডি মডেলের চূড়ান্ত ধাপ হলো MLOps

  1. মনিটরিং: Prometheus বা AWS SageMaker Model Monitor-এর মতো টুল ব্যবহার করে API-এর কার্যকারিতা ট্র্যাক করা হয় এবং ডেটা ড্রিফট (যখন নতুন গ্রাহক ডেটা বৈশিষ্ট্যগুলি প্রশিক্ষণের ডেটা থেকে বিচ্যুত হয়) বা মডেল ড্রিফট (যখন মডেলের কার্যকারিতা সময়ের সাথে সাথে হ্রাস পায়) সনাক্ত করা হয়।
  2. রিট্রেনিং: মনিটরিং সতর্কতার উপর ভিত্তি করে, একটি স্বয়ংক্রিয় পাইপলাইন ট্রিগার করা হয় যাতে XGBoost মডেলটিকে সর্বশেষ গ্রাহক ডেটার উপর পুনরায় প্রশিক্ষণ দেওয়া যায়, এটি নিশ্চিত করে যে পূর্বাভাসের নির্ভুলতা উচ্চ থাকে। এটি মডেলটিকে ব্যবসাকে নির্ভরযোগ্য, রিয়েল-টাইম অন্তর্দৃষ্টি প্রদান চালিয়ে যাওয়ার গ্যারান্টি দেয়।


১. গ্রাহক হারানোর পূর্বাভাসে XGBoost কেন প্রায়শই বেছে নেওয়া হয়?
উত্তর: XGBoost হলো একটি অপটিমাইজড গ্রেডিয়েন্ট বুস্টিং অ্যালগরিদম, যা তার উচ্চ নির্ভুলতা, দক্ষতা এবং গ্রাহকের ডেটাতে বিদ্যমান নন-লিনিয়ার সম্পর্ক ও ফিচার ইন্টারঅ্যাকশন স্বয়ংক্রিয়ভাবে হ্যান্ডেল করার ক্ষমতার জন্য পরিচিত।
২. scale_pos_weight প্যারামিটারটির ভূমিকা কী?
উত্তর: অসামঞ্জস্যপূর্ণ চার্ন ডেটাতে, scale_pos_weight হলো একটি XGBoost হাইপারপ্যারামিটার যা সংখ্যালঘু শ্রেণীকে (চার্নারদের) ভুল শ্রেণীবদ্ধ করার জন্য পেনাল্টি বাড়ায়, যাতে মডেলটি ঝুঁকিপূর্ণ গ্রাহকদের সঠিকভাবে শনাক্ত করার দিকে বেশি মনোযোগ দেয়।
৩. ডেপ্লয়মেন্টের সময় "রিয়েল-টাইম" পূর্বাভাস কীভাবে অর্জন করা হয়?
উত্তর: FastAPI বা Flask-এর মতো লো-ল্যাটেন্সি ওয়েব ফ্রেমওয়ার্কের মাধ্যমে মডেলটি ডেপ্লয় করার মাধ্যমে রিয়েল-টাইম পূর্বাভাস অর্জন করা হয়। নতুন গ্রাহকের ডেটা API-তে পাঠানো হয়, তাৎক্ষণিকভাবে প্রক্রিয়াজাত হয় এবং পূর্বাভাস মিলিসেকেন্ডের মধ্যে ফিরে আসে, যা দ্রুত ব্যবসায়িক পদক্ষেপের সুযোগ দেয়।



EiAmi.com