एक मॉडल की अनुमानित संभावना के अंशांकन को विज़ुअलाइज़ करना


23

मान लीजिए मेरे पास एक पूर्वानुमान मॉडल है जो प्रत्येक उदाहरण के लिए, प्रत्येक वर्ग के लिए एक संभावना है। अब मैं पहचानता हूं कि ऐसे मॉडल का मूल्यांकन करने के कई तरीके हैं यदि मैं वर्गीकरण (सटीक, याद, आदि) के लिए उन संभावनाओं का उपयोग करना चाहता हूं। मैं यह भी मानता हूं कि एक आरओसी वक्र और इसके तहत क्षेत्र का उपयोग यह निर्धारित करने के लिए किया जा सकता है कि मॉडल कक्षाओं के बीच कितनी अच्छी तरह से अंतर करता है। वे नहीं हैं जिनके बारे में मैं पूछ रहा हूं।

मुझे मॉडल के अंशांकन का आकलन करने में दिलचस्पी है । मुझे पता है कि इस कार्य के लिए बैरियर स्कोर जैसा स्कोरिंग नियम उपयोगी हो सकता है। यह ठीक है, और मैं संभवतः उन पंक्तियों के साथ कुछ शामिल करूंगा, लेकिन मुझे यकीन नहीं है कि इस तरह के मेट्रिक्स कितने सहज ज्ञान युक्त व्यक्ति के लिए होंगे। मुझे कुछ और दृश्य की तलाश है। मैं चाहता हूं कि परिणाम की व्याख्या करने वाला व्यक्ति यह देखने में सक्षम हो कि जब मॉडल कुछ भविष्यवाणी करता है या नहीं, तो ऐसा होने की संभावना 70% है कि यह वास्तव में होता है ~ 70% समय, आदि।

मैंने QQ भूखंडों के बारे में सुना (लेकिन कभी इस्तेमाल नहीं किया गया) , और सबसे पहले मैंने सोचा कि मैं यही देख रहा था। हालांकि, ऐसा लगता है कि वास्तव में दो प्रायिकता वितरण की तुलना करने के लिए है । यह सीधे तौर पर मेरे पास नहीं है। मेरे पास उदाहरणों के एक समूह के लिए, मेरी अनुमानित संभावना है और फिर क्या वास्तव में घटना हुई है:

Index    P(Heads)    Actual Result
    1          .4            Heads
    2          .3            Tails
    3          .7            Heads
    4         .65            Tails
  ...         ...              ...

तो क्या वास्तव में एक QQ साजिश है जो मैं चाहता हूं, या क्या मैं कुछ और ढूंढ रहा हूं? यदि एक QQ प्लॉट वह है जो मुझे उपयोग करना चाहिए, तो मेरे डेटा को प्रायिकता वितरण में बदलने का सही तरीका क्या है?

मैं कल्पना करता हूं कि मैं संभाव्यता की भविष्यवाणी करके दोनों स्तंभों को क्रमबद्ध कर सकता हूं और फिर कुछ डिब्बे बना सकता हूं। क्या इस प्रकार की चीज़ मुझे करनी चाहिए, या मैं अपनी सोच में कहीं दूर हूँ? मैं विभिन्न विवेकाधिकार तकनीकों से परिचित हूं, लेकिन क्या इस प्रकार की चीज़ों के लिए मानक में विवेक का एक विशिष्ट तरीका है?

जवाबों:


19

आपकी सोच अच्छी है।

जॉन टके ने बछड़ों द्वारा द्विपद की सिफारिश की: डेटा को ऊपरी और निचले हिस्सों में विभाजित करें, फिर उन हिस्सों को विभाजित करें, फिर चरम हिस्सों को पुनरावर्ती रूप से विभाजित करें। समान-चौड़ाई वाले बिनिंग की तुलना में, यह डेटा के थोक (बीच में) में बहुत अधिक चित्रमय तत्वों को समर्पित किए बिना पूंछ के व्यवहार के दृश्य निरीक्षण की अनुमति देता है।

यहाँ एक उदाहरण (आर का उपयोग करके) तुकी के दृष्टिकोण का है। (यह बिल्कुल समान नहीं है: उन्होंने mletterथोड़ा अलग तरीके से लागू किया ।)

पहले, आइए कुछ भविष्यवाणियां करें और कुछ परिणाम जो उन भविष्यवाणियों के अनुरूप हों:

set.seed(17)
prediction <- rbeta(500, 3/2, 5/2)
actual <- rbinom(length(prediction), 1, prediction)
plot(prediction, actual, col="Gray", cex=0.8)

कथानक बहुत जानकारीपूर्ण नहीं है, क्योंकि सभी actualमूल्य, निश्चित रूप से, ( या नहीं हुआ) या 1 (हुआ) नहीं है। (यह नीचे दिए गए पहले आंकड़े में ग्रे ओपन सर्कल की पृष्ठभूमि के रूप में दिखाई देता है।) इस भूखंड को चौरसाई की आवश्यकता है। ऐसा करने के लिए, हम डेटा को बिन करते हैं। फंक्शन बंटवारे को कम करता है। इसका पहला तर्क 1 और (दूसरा तर्क) के बीच रैंक का एक सरणी है । यह प्रत्येक बिन के लिए अद्वितीय (संख्यात्मक) पहचानकर्ता देता है:01mletterrn

mletter <- function(r,n) {
    lower <-  2 + floor(log(r/(n+1))/log(2))
    upper <- -1 - floor(log((n+1-r)/(n+1))/log(2))
    i <- 2*r > n
    lower[i] <- upper[i]
    lower
}

इसका उपयोग करते हुए, हम भविष्यवाणियों और परिणामों दोनों को बिन करते हैं और प्रत्येक बिन के भीतर औसतन। रास्ते में, हम बिन आबादी की गणना करते हैं:

classes <- mletter(rank(prediction), length(prediction))
pgroups <- split(prediction, classes)
agroups <- split(actual, classes)
bincounts <- unlist(lapply(pgroups, length)) # Bin populations
x <- unlist(lapply(pgroups, mean))           # Mean predicted values by bin
y <- unlist(lapply(agroups, mean))           # Mean outcome by bin

प्लॉट को प्रभावी ढंग से प्रदर्शित करने के लिए हमें प्रतीक क्षेत्रों को बिन मायने के अनुपात में बनाना चाहिए । यह प्रतीक के रंगों को थोड़ा अलग करने में मददगार हो सकता है, भी, जहां:

binprop <- bincounts / max(bincounts)
colors <- -log(binprop)/log(2)
colors <- colors - min(colors)
colors <- hsv(colors / (max(colors)+1))

हाथ में इन के साथ, अब हम पूर्ववर्ती कथानक को बढ़ाते हैं:

abline(0,1, lty=1, col="Gray")                           # Reference curve
points(x,y, pch=19, cex = 3 * sqrt(binprop), col=colors) # Solid colored circles
points(x,y, pch=1, cex = 3 * sqrt(binprop))              # Circle outlines

आकृति

एक खराब भविष्यवाणी के उदाहरण के रूप में, आइए डेटा बदलते हैं:

set.seed(17)
prediction <- rbeta(500, 5/2, 1)
actual <- rbinom(length(prediction), 1, 1/2 + 4*(prediction-1/2)^3)

विश्लेषण को दोहराने से इस भूखंड का निर्माण होता है जिसमें विचलन स्पष्ट होते हैं:

चित्र 2

यह मॉडल ओवरोप्टिमिस्टिक हो जाता है (50% से 90% सीमा में पूर्वानुमानों के लिए औसत परिणाम बहुत कम हैं)। कुछ मामलों में जहां भविष्यवाणी कम (30% से कम) है, मॉडल बहुत निराशावादी है।


(+1) बहुत अच्छा, धन्यवाद। मुझे लगता है कि रंग उद्देश्य से थोड़ा विचलित कर सकते हैं, लेकिन बाकी एक अच्छा विचार था और बहुत अच्छा स्पष्टीकरण था।
माइकल मैकगोवन

माइकल, मैंने पाया कि कुछ रंग बहुत छोटे हलकों को देखने में मदद करने के लिए आवश्यक थे जो दोनों छोर पर दिखाई देते हैं। एक स्थिर रंग निश्चित रूप से इसे पूरा करेगा। बस आपको मनचाहे col=colorsरंग से बदलना है, जैसे कि col="Red"
व्हिबर

+1, यह बहुत अच्छा है। हालाँकि, मैं इस बात से बिलकुल भी सहमत नहीं हूँ कि संदर्भ रेखा एक साधारण, सीधी 45 डिग्री लाइन, उचित लॉजिस्टिक रिग्रेशन लाइन या लूस के बजाय क्यों है? मुझे यह सोचना चाहिए कि वे अधिक उपयुक्त संदर्भ होंगे जिनके खिलाफ भविष्यवाणियों की गुणवत्ता का न्याय करना है।
गंग - मोनिका

पीपी±[0,1]×[0,1]
whuber

@ गुंग (ले 2) मुझे क्या लगता है कि आपके मन में हो सकता है कि अवशिष्ट में अपेक्षित भिन्नता के लिए दृश्य में सुधार हो। यह भिन्नता आनुपातिक होनी चाहिएपी(1-पी)/nपीn

4

एक अन्य विकल्प आइसोटोनिक प्रतिगमन है। यह व्हिबर के उत्तर के समान है सिवाय इसके कि डब्बे को हिस्सों में विभाजित करने के बजाय गतिशील रूप से उत्पन्न किया जाता है, एक आवश्यकता के साथ कि आउटपुट सख्ती से बढ़ रहा है।

आइसोटोनिक रिग्रेशन का यह प्राथमिक उपयोग आपकी संभावनाओं को पुनर्गठित करना है यदि उन्हें खराब अंशांकित दिखाया गया है, लेकिन इसका उपयोग विज़ुअलाइज़ेशन के लिए भी किया जा सकता है। मूल रूप से, यदि आइसोटोनिक प्रतिगमन रेखा लगभग Y = X रेखा का अनुसरण करती है, तो आपकी संभावनाएं ठीक से कैलिब्रेट की जाती हैं।

संभावनाओं पर आइसोटोनिक प्रतिगमन

यह व्हिबर द्वारा दिखाए गए समस्या पर लागू आइसोटोनिक रिग्रेशन है।

import numpy as np
import matplotlib.pyplot as plt
from sklearn.isotonic import IsotonicRegression

prediction = np.random.beta(3.0/2.0, 5.0/2.0, size=500)
actual = np.random.binomial(1,prediction, len(prediction))
plt.scatter(prediction, actual,  facecolors='none', edgecolors=[0.3,0.3,0.3], label='Data')

ir = IsotonicRegression()
isotonic = ir.fit_transform(prediction, actual)
plt.plot(prediction, isotonic,'ok', label='Isotonic Fit')

plt.xlabel('Prediction')
plt.ylabel('Actual')
plt.plot([0,1],[0,1], '--k', label='y=x line')
plt.legend(loc = 'center left')

http://fa.bianp.net/blog/2013/isotonic-regression/

http://stat.wikia.com/wiki/Isotonic_regression


0

आप पैकेज "सत्यापन" को भी देखना चाहेंगे:

http://cran.r-project.org/web/packages/verification/index.html

विगनेट में प्लॉट हैं जो उपयोगी हो सकते हैं:

http://cran.r-project.org/web/packages/verification/vignettes/verification.pdf


1
विगनेट लिंक अब काम नहीं करता है, और पहले सीआरएएन लिंक के पास अब कोई विगनेट नहीं है।
बीएलटी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.