ए आपके मामले में, दहलीज बदलना स्वीकार्य है और यहां तक कि आवश्यक भी हो सकता है। डिफ़ॉल्ट दहलीज 50% पर है, लेकिन व्यापार बिंदु से गैर-पुनर्भुगतान की 15% संभावना भी इस तरह के आवेदन को अस्वीकार करने के लिए पर्याप्त हो सकती है।
वास्तव में, क्रेडिट स्कोरिंग में एक सामान्य मॉडल के साथ डिफ़ॉल्ट की संभावना की भविष्यवाणी करने के बाद अलग-अलग उत्पाद शर्तों या ग्राहक खंडों के लिए अलग-अलग कट ऑफ सेट करना आम है (उदाहरण के लिए नाइम सिद्दीकी द्वारा "क्रेडिट जोखिम स्कोरकार्ड" का अध्याय 9 देखें)।
बी।
- दरअसल,
predict_proba
और सीमा यह alpha
करने के लिए मैन्युअल, या एक आवरण वर्ग के साथ (नीचे कोड देखें): वहाँ मनमाना alpha
पर सीमा के लिए दो सुविधाजनक तरीके से 50% के बजाय कर रहे हैं। यदि आप मॉडल को रिफ्रेश किए बिना एकाधिक थ्रेसहोल्ड का प्रयास करना चाहते हैं तो इसका उपयोग करें।
- मॉडल को फ़िट करने से पहले
class_weights
(alpha, 1-alpha)
बदलें।
और अब, आवरण के लिए एक नमूना कोड:
import numpy as np
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
from sklearn.base import BaseEstimator, ClassifierMixin
X, y = make_classification(random_state=1)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
class CustomThreshold(BaseEstimator, ClassifierMixin):
""" Custom threshold wrapper for binary classification"""
def __init__(self, base, threshold=0.5):
self.base = base
self.threshold = threshold
def fit(self, *args, **kwargs):
self.base.fit(*args, **kwargs)
return self
def predict(self, X):
return (self.base.predict_proba(X)[:, 1] > self.threshold).astype(int)
rf = RandomForestClassifier(random_state=1).fit(X_train, y_train)
clf = [CustomThreshold(rf, threshold) for threshold in [0.3, 0.5, 0.7]]
for model in clf:
print(confusion_matrix(y_test, model.predict(X_test)))
assert((clf[1].predict(X_test) == clf[1].base.predict(X_test)).all())
assert(sum(clf[0].predict(X_test)) > sum(clf[0].base.predict(X_test)))
assert(sum(clf[2].predict(X_test)) < sum(clf[2].base.predict(X_test)))
यह विभिन्न द्वार के लिए उत्पादन 3 भ्रम मैट्रिक्स देगा:
[[13 1]
[ 2 9]]
[[14 0]
[ 3 8]]
[[14 0]
[ 4 7]]
स्रोत
2017-11-24 13:12:28
हाँ, मुझे लगता है कि यह करने के लिए एक ही रास्ता है predict_proba का उपयोग करके और दहलीज को हाथ से बदलकर (या कुछ मीट्रिक के अनुसार सर्वोत्तम दहलीज चुनने के लिए एक फ़ंक्शन लिखना)। यह अन्य मामलों में एक बुरा विचार हो सकता है, लेकिन निश्चित रूप से इस मामले में समझ में आता है। – amanbirs