ROC Curve (Receiver Operating Characteristic curve) হলো মেশিন লার্নিং মডেলের কর্মক্ষমতা মূল্যায়নের একটি গুরুত্বপূর্ণ গ্রাফিক্যাল টুল, বিশেষ করে যখন আমরা বাইনারি ক্লাসিফিকেশন সমস্যার (Binary Classification Problem) সমাধান করি। এটি মডেলের থ্রেশহোল্ড (Threshold) পরিবর্তনের সাথে সাথে এর সত্য ধনাত্মক হার (True Positive Rate – TPR) এবং মিথ্যা ধনাত্মক হার (False Positive Rate – FPR) এর মধ্যে সম্পর্ক দেখায়।
চলুন, এই বিষয়গুলো উদাহরণ সহ বিস্তারিতভাবে আলোচনা করা যাক:
ROC Curve পরিচিতি
ROC Curve একটি গ্রাফ যা একটি ক্লাসিফিকেশন মডেলের বিভিন্ন থ্রেশহোল্ড সেটিংসে তার পারফরম্যান্স দেখায়। এটি মূলত দুটি মেট্রিকের উপর ভিত্তি করে তৈরি:
- True Positive Rate (TPR) / Recall / Sensitivity: এটি সমস্ত প্রকৃত ধনাত্মক (Positive) কেসের মধ্যে কতগুলো মডেল সঠিকভাবে ধনাত্মক হিসেবে ভবিষ্যদ্বাণী করেছে তার অনুপাত।
- False Positive Rate (FPR): এটি সমস্ত প্রকৃত ঋণাত্মক (Negative) কেসের মধ্যে কতগুলো মডেল ভুলভাবে ধনাত্মক হিসেবে ভবিষ্যদ্বাণী করেছে তার অনুপাত।
ROC কার্ভে, FPR কে x-অক্ষে এবং TPR কে y-অক্ষে প্লট করা হয়। একটি আদর্শ মডেলের ROC কার্ভ উপরের বাম কোণের দিকে (0,1) বিন্দুর কাছাকাছি থাকে, যা বোঝায় যে মডেলটি উচ্চ TPR এবং নিম্ন FPR অর্জন করতে সক্ষম।
ROC Curve এর উদাহরণ
ধরুন, আমরা একটি মেডিকেল ডায়াগনোসিস মডেল তৈরি করেছি যা একজন রোগীর ক্যান্সার আছে কিনা তা ভবিষ্যদ্বাণী করে। আমাদের কাছে 100 জন রোগীর ডেটা আছে:
- 50 জনের ক্যান্সার আছে (প্রকৃত ধনাত্মক)
- 50 জনের ক্যান্সার নেই (প্রকৃত ঋণাত্মক)
আমাদের মডেল প্রতিটি রোগীর জন্য একটি স্কোর প্রদান করে যা ক্যান্সারের সম্ভাব্যতা নির্দেশ করে (0 থেকে 1 এর মধ্যে)। আমরা একটি থ্রেশহোল্ড সেট করব, যেমন 0.5। যদি স্কোর 0.5 এর বেশি হয়, মডেলটি ক্যান্সার আছে বলে ভবিষ্যদ্বাণী করবে।
বিভিন্ন থ্রেশহোল্ডে মডেলের পারফরম্যান্স কেমন হতে পারে তা দেখি: থ্রেশহোল্ড = 0.5:
- True Positives (TP): 40 (সঠিকভাবে ক্যান্সার শনাক্ত)
- False Negatives (FN): 10 (ক্যান্সার থাকা সত্ত্বেও শনাক্ত করতে পারেনি)
- False Positives (FP): 5 (ক্যান্সার না থাকা সত্ত্বেও ভুলভাবে শনাক্ত)
- True Negatives (TN): 45 (সঠিকভাবে ক্যান্সার নেই বলে শনাক্ত)
এই থ্রেশহোল্ডে:
- এটি ROC কার্ভে একটি বিন্দু (0.1, 0.8) দেবে।
আমরা যদি থ্রেশহোল্ড পরিবর্তন করি (যেমন 0.3 বা 0.7), তাহলে TP, FN, FP, TN এর মান পরিবর্তিত হবে এবং ফলস্বরূপ TPR ও FPR এর মানও পরিবর্তিত হবে। এই পরিবর্তিত TPR ও FPR মানগুলো ROC কার্ভে ভিন্ন ভিন্ন বিন্দু তৈরি করবে। সমস্ত সম্ভাব্য থ্রেশহোল্ডের জন্য এই বিন্দুগুলো যোগ করে ROC কার্ভ তৈরি হয়।
Interpreting ROC-AUC Score (ROC-AUC স্কোর ব্যাখ্যা)
ROC-AUC (Area Under the Receiver Operating Characteristic Curve) স্কোর হলো ROC কার্ভের অধীনে থাকা ক্ষেত্রের পরিমাণ। AUC এর মান 0 থেকে 1 এর মধ্যে থাকে।
- AUC = 1: এটি একটি নিখুঁত ক্লাসিফায়ারকে নির্দেশ করে, যেখানে মডেল সমস্ত ধনাত্মক এবং ঋণাত্মক কেসকে নির্ভুলভাবে আলাদা করতে পারে।
- AUC = 0.5: এটি একটি র্যান্ডম ক্লাসিফায়ারকে নির্দেশ করে, যা একটি কয়েন টসের (coin toss) মতোই পারফর্ম করে। অর্থাৎ, মডেলটির ভবিষ্যদ্বাণী র্যান্ডম গেসিংয়ের চেয়ে ভালো নয়।
- AUC < 0.5: এটি নির্দেশ করে যে মডেলটি র্যান্ডম গেসিংয়ের চেয়েও খারাপ পারফর্ম করছে। এক্ষেত্রে, আপনি মডেলের ভবিষ্যদ্বাণীর ফলাফল উল্টে দিতে পারেন (যেমন, যদি মডেল 0.6 দেয়, আপনি তাকে 0.4 ভাবতে পারেন) এবং এটি 0.5 এর বেশি AUC দেবে।
উচ্চতর AUC স্কোর একটি মডেলের ভালো কর্মক্ষমতা নির্দেশ করে। এটি বোঝায় যে মডেলটি পজিটিভ এবং নেগেটিভ ক্লাসগুলোকে ভালোভাবে আলাদা করতে পারে। AUC একটি চমৎকার মেট্রিক যখন ডেটাসেটে ক্লাস ইমব্যালেন্স (Class Imbalance) থাকে, অর্থাৎ একটি ক্লাস অন্য ক্লাসের তুলনায় অনেক বেশি থাকে।
Plotting ROC Curve Using Python
পাইথনে scikit-learn
লাইব্রেরি ব্যবহার করে ROC কার্ভ প্লট করা খুব সহজ।
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 |
import numpy as np from sklearn.metrics import roc_curve, auc import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression # ১. কিছু ডামি ডেটা তৈরি করা যাক # এটি একটি সাধারণ ক্লাসিফিকেশন সমস্যা, যেখানে দুটি ক্লাস আছে (0 এবং 1) np.random.seed(42) X = np.random.rand(100, 2) # 100 টি স্যাম্পল, 2 টি ফিচার y = (X[:, 0] + X[:, 1] > 1).astype(int) # একটি সহজ লিনিয়ার সেপারেটর # ডেটা ট্রেন এবং টেস্ট সেটে ভাগ করা X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # ২. একটি ক্লাসিফিকেশন মডেল তৈরি এবং প্রশিক্ষণ # এখানে আমরা একটি লজিস্টিক রিগ্রেশন মডেল ব্যবহার করছি model = LogisticRegression() model.fit(X_train, y_train) # ৩. টেস্ট ডেটার জন্য সম্ভাব্যতা পূর্বাভাস (Probability Prediction) # ROC কার্ভ প্লট করার জন্য আমাদের মডেলের সম্ভাব্যতার স্কোর দরকার, সরাসরি ক্লাস প্রেডিকশন নয় y_pred_proba = model.predict_proba(X_test)[:, 1] # ক্লাস 1 এর জন্য সম্ভাব্যতা # ৪. ROC কার্ভের জন্য FPR এবং TPR গণনা fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba) # ৫. AUC স্কোর গণনা roc_auc = auc(fpr, tpr) # ৬. ROC কার্ভ প্লট করা plt.figure(figsize=(8, 6)) plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc) plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--') # র্যান্ডম ক্লাসিফায়ারের লাইন plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver Operating Characteristic (ROC) Curve') plt.legend(loc="lower right") plt.grid(True) plt.show() print(f"The AUC score for the model is: {roc_auc:.2f}") |
উপরের কোডটি একটি ROC কার্ভ প্লট করবে এবং AUC স্কোর প্রিন্ট করবে। আপনি দেখতে পাবেন যে একটি আদর্শ ROC কার্ভ উপরের বাম কোণের দিকে থাকবে, এবং র্যান্ডম ক্লাসিফায়ারের (0,0) থেকে (1,1) পর্যন্ত একটি তির্যক রেখা থাকবে।
মেশিন লার্নিংয়ের জন্য ROC Curve এর গুরুত্ব
মেশিন লার্নিংয়ে ROC কার্ভের গুরুত্ব অপরিসীম, বিশেষ করে যখন:
- ক্লাস ইমব্যালেন্স (Class Imbalance): যখন একটি ক্লাসের স্যাম্পল সংখ্যা অন্য ক্লাসের তুলনায় অনেক কম হয় (যেমন, 95% নেগেটিভ এবং 5% পজিটিভ কেস), তখন অ্যাকুরেসি (Accuracy) একটি বিভ্রান্তিকর মেট্রিক হতে পারে। ROC-AUC এই ধরনের ক্ষেত্রে মডেলের কর্মক্ষমতা মূল্যায়নে অধিক নির্ভরযোগ্য।
- থ্রেশহোল্ড নির্বাচন (Threshold Selection): ROC কার্ভ আপনাকে বিভিন্ন থ্রেশহোল্ডে মডেলের পারফরম্যান্স কেমন হবে তা বুঝতে সাহায্য করে। আপনি অ্যাপ্লিকেশনটির নির্দিষ্ট প্রয়োজনীয়তা (যেমন, মিথ্যা ধনাত্মক কম রাখা নাকি মিথ্যা ঋণাত্মক কম রাখা) অনুযায়ী একটি উপযুক্ত থ্রেশহোল্ড বেছে নিতে পারেন।
- মডেল তুলনা (Model Comparison): একাধিক ক্লাসিফিকেশন মডেলের কর্মক্ষমতা তুলনা করার জন্য ROC কার্ভ একটি চমৎকার ভিজ্যুয়াল টুল। যে মডেলের ROC কার্ভ উপরের বাম কোণের দিকে বেশি বাঁকা এবং যার AUC স্কোর বেশি, সেটি সাধারণত ভালো পারফর্ম করে।
- অ্যাগনোস্টিক টু ক্লাস ডিস্ট্রিবিউশন (Agnostic to Class Distribution): ROC কার্ভ এবং AUC স্কোর ডেটাসেটে ক্লাস বিতরণের প্রতি সংবেদনশীল নয়। অর্থাৎ, এটি ক্লাসের অনুপাত পরিবর্তন হলেও মডেলের ক্ষমতাকে সঠিকভাবে প্রতিফলিত করে।
সমস্যার ধরন অনুযায়ী মেট্রিক নির্বাচন (Choosing Metrics)
মেশিন লার্নিং মডেলে পারফরম্যান্স মূল্যায়নের জন্য সঠিক মেট্রিক নির্বাচন করা অত্যন্ত গুরুত্বপূর্ণ। এটি সমস্যার ধরন এবং ব্যবসার উদ্দেশ্যের উপর নির্ভর করে। এখানে কিছু সাধারণ মেট্রিক এবং কখন সেগুলো ব্যবহার করবেন তার নির্দেশনা দেওয়া হলো:
- Accuracy (সঠিকতা) :
- যখন ব্যবহার করবেন: যখন আপনার ক্লাসের ডিস্ট্রিবিউশন মোটামুটি ভারসাম্যপূর্ণ থাকে (Balanced Classes)।
- উদাহরণ: একটি ই-কমার্স ওয়েবসাইটে পণ্যের রিভিউ পজিটিভ না নেগেটিভ তা ক্লাসিফাই করা।
- সীমাবদ্ধতা: ক্লাস ইমব্যালেন্সের ক্ষেত্রে বিভ্রান্তিকর হতে পারে। যেমন, 95% নেগেটিভ ক্লাস সহ একটি মডেলে যদি আপনি সবসময় নেগেটিভ ভবিষ্যদ্বাণী করেন, তাহলে আপনার অ্যাকুরেসি 95% হবে, কিন্তু এটি অকেজো।
- Precision (নির্ভুলতা) :
- যখন ব্যবহার করবেন: যখন False Positives (মিথ্যা ধনাত্মক) এর খরচ বেশি হয়। অর্থাৎ, যখন মডেল ভুলভাবে কোনো কিছুকে পজিটিভ হিসেবে ভবিষ্যদ্বাণী করলে তার গুরুতর পরিণতি হয়।
- উদাহরণ: স্প্যাম ইমেল সনাক্তকরণ। আপনি নিশ্চিত হতে চান যে একটি বৈধ ইমেলকে স্প্যাম হিসাবে চিহ্নিত করা না হয় (কম False Positive), কারণ এটি গুরুত্বপূর্ণ ইমেল মিস করতে পারে।
- সূত্র:
- Recall / Sensitivity (পুনরুদ্ধার / সংবেদনশীলতা) :
- যখন ব্যবহার করবেন: যখন False Negatives (মিথ্যা ঋণাত্মক) এর খরচ বেশি হয়। অর্থাৎ, যখন মডেল ভুলভাবে কোনো কিছুকে নেগেটিভ হিসেবে ভবিষ্যদ্বাণী করলে তার গুরুতর পরিণতি হয়।
- উদাহরণ: ক্যান্সার সনাক্তকরণ। আপনি নিশ্চিত হতে চান যে মডেলটি কোনো ক্যান্সার রোগীকেই মিস না করে (কম False Negative), কারণ এটি জীবন-হুমকি হতে পারে।
- সূত্র:
- F1-Score (এফ1-স্কোর) :
- যখন ব্যবহার করবেন: যখন আপনার Precision এবং Recall উভয়ই গুরুত্বপূর্ণ এবং আপনি তাদের মধ্যে একটি ভারসাম্য চান, বিশেষ করে যখন ক্লাস ইমব্যালেন্স থাকে। এটি Precision এবং Recall এর হারমোনিক গড়।
- উদাহরণ: জালিয়াতি সনাক্তকরণ, যেখানে আপনি জালিয়াতি সঠিকভাবে সনাক্ত করতে চান (Recall) এবং একই সাথে নিরীহ লেনদেনকে জালিয়াতি হিসেবে ভুলভাবে চিহ্নিত করা থেকে বিরত থাকতে চান (Precision)।
- সূত্র: $F1-Score = 2 \* \\frac{Precision \* Recall}{Precision + Recall}$
- ROC-AUC :
- যখন ব্যবহার করবেন:
- যখন ক্লাস ইমব্যালেন্স একটি গুরুত্বপূর্ণ সমস্যা।
- যখন আপনি মডেলের পারফরম্যান্সকে বিভিন্ন থ্রেশহোল্ড জুড়ে মূল্যায়ন করতে চান।
- যখন আপনি একাধিক মডেলের কর্মক্ষমতা তুলনা করতে চান, বিশেষ করে তাদের শ্রেণীবিন্যাস ক্ষমতা বিবেচনা করে।
- উদাহরণ: ক্রেডিট ডিফল্ট ভবিষ্যদ্বাণী, রোগের প্রাদুর্ভাবের ভবিষ্যদ্বাণী, বা গ্রাহকের টার্ন (churn) ভবিষ্যদ্বাণী।
- যখন ব্যবহার করবেন:
- Confusion Matrix :
- যখন ব্যবহার করবেন: যখন আপনি মডেলের প্রতিটি শ্রেণীর জন্য True Positives, False Positives, True Negatives, False Negatives এর সংখ্যা বিস্তারিতভাবে দেখতে চান। এটি অন্যান্য মেট্রিকের ভিত্তি।
- উদাহরণ: যেকোনো ক্লাসিফিকেশন সমস্যা, যেখানে আপনি মডেলের ভুলগুলো বিস্তারিতভাবে বিশ্লেষণ করতে চান।
মেশিন লার্নিংয়ে একটি মডেলের কর্মক্ষমতা মূল্যায়নের জন্য ROC কার্ভ এবং AUC স্কোর অত্যন্ত শক্তিশালী টুল। এগুলি বিশেষ করে ক্লাস ইমব্যালেন্সের ক্ষেত্রে মডেলের শ্রেণীবিন্যাস ক্ষমতাকে কার্যকরভাবে পরিমাপ করে। তবে, আপনার নির্দিষ্ট সমস্যার ধরন এবং ব্যবসার উদ্দেশ্য বিবেচনা করে সঠিক মেট্রিক নির্বাচন করা অত্যন্ত গুরুত্বপূর্ণ।
Leave a Comment