6

मैं एक वर्गीकरण का निर्माण कर रहा हूं जो उधार क्लब डेटा के माध्यम से जाता है, और सर्वोत्तम एक्स ऋण का चयन करता है। मैंने एक यादृच्छिक वन प्रशिक्षित किया है, और सामान्य आरओसी घटता, भ्रम Matrices, आदि बनायाविज्ञान - एकाधिक भ्रम मैट्रिक्स बनाने के लिए दहलीज को बदलना

भ्रम मैट्रिक्स वर्गीकरण (जंगल में पेड़ों की बहुमत भविष्यवाणी) की भविष्यवाणियों के तर्क के रूप में लेता है। हालांकि, मैं अलग-अलग थ्रेसहोल्ड पर एकाधिक confusion matrices प्रिंट करना चाहता हूं, यह जानने के लिए कि क्या होता है यदि मैं 10% सर्वोत्तम ऋण, 20% सर्वोत्तम ऋण, आदि

मुझे अन्य प्रश्न पढ़ने से पता है changing the threshold is often a bad idea, लेकिन क्या कोई है इन स्थितियों के लिए भ्रम matrices देखने के लिए अन्य तरीका? (प्रश्न ए)

यदि मैं थ्रेसहोल्ड बदलने के साथ आगे बढ़ता हूं, तो क्या मुझे यह मानना ​​चाहिए कि predict proba पर ऐसा करने का सबसे अच्छा तरीका है और फिर इसे हाथ से थ्रेसहोल्ड मैट्रिक्स में पास कर रहा है? (प्रश्न बी)

+0

हाँ, मुझे लगता है कि यह करने के लिए एक ही रास्ता है predict_proba का उपयोग करके और दहलीज को हाथ से बदलकर (या कुछ मीट्रिक के अनुसार सर्वोत्तम दहलीज चुनने के लिए एक फ़ंक्शन लिखना)। यह अन्य मामलों में एक बुरा विचार हो सकता है, लेकिन निश्चित रूप से इस मामले में समझ में आता है। – amanbirs

उत्तर

0

आपके मामले में, दहलीज बदलना स्वीकार्य है और यहां तक ​​कि आवश्यक भी हो सकता है। डिफ़ॉल्ट दहलीज 50% पर है, लेकिन व्यापार बिंदु से गैर-पुनर्भुगतान की 15% संभावना भी इस तरह के आवेदन को अस्वीकार करने के लिए पर्याप्त हो सकती है।

वास्तव में, क्रेडिट स्कोरिंग में एक सामान्य मॉडल के साथ डिफ़ॉल्ट की संभावना की भविष्यवाणी करने के बाद अलग-अलग उत्पाद शर्तों या ग्राहक खंडों के लिए अलग-अलग कट ऑफ सेट करना आम है (उदाहरण के लिए नाइम सिद्दीकी द्वारा "क्रेडिट जोखिम स्कोरकार्ड" का अध्याय 9 देखें)।

बी

  1. दरअसल, predict_proba और सीमा यह alpha करने के लिए मैन्युअल, या एक आवरण वर्ग के साथ (नीचे कोड देखें): वहाँ मनमाना alpha पर सीमा के लिए दो सुविधाजनक तरीके से 50% के बजाय कर रहे हैं। यदि आप मॉडल को रिफ्रेश किए बिना एकाधिक थ्रेसहोल्ड का प्रयास करना चाहते हैं तो इसका उपयोग करें।
  2. मॉडल को फ़िट करने से पहले 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]] 
संबंधित मुद्दे