কোনও মডেলের ভবিষ্যদ্বাণী করা সম্ভাবনার ক্রমাঙ্কনটি ভিজ্যুয়ালাইজ করা


23

ধরুন আমার কাছে একটি ভবিষ্যদ্বাণীপূর্ণ মডেল রয়েছে যা প্রতিটি উদাহরণের জন্য, প্রতিটি শ্রেণীর জন্য সম্ভাব্যতা তৈরি করে। এখন আমি স্বীকার করেছি যে আমি যদি শ্রেণিবদ্ধকরণের জন্য (সম্ভাব্যতা, প্রত্যাহার ইত্যাদি) ব্যবহার করতে চাই তবে এই জাতীয় মডেলটি মূল্যায়নের অনেকগুলি উপায় রয়েছে। আমি আরও জানি যে একটি আরওসি বক্ররেখা এবং এর অধীনে অঞ্চলটি মডেলটি ক্লাসগুলির মধ্যে কতটা ভাল পার্থক্য করে তা নির্ধারণ করতে ব্যবহার করা যেতে পারে। এগুলি আমি যা জিজ্ঞাসা করছি তা নয়।

আমি মডেলটির ক্রমাঙ্কন মূল্যায়ন করতে আগ্রহী । আমি জানি যে বারিয়ার স্কোরের মতো একটি স্কোরিং নিয়ম এই কাজের জন্য কার্যকর হতে পারে। এটি ঠিক আছে, এবং আমি সম্ভবত এই রেখাগুলির সাথে কিছু অন্তর্ভুক্ত করব, তবে আমি নিশ্চিত নই যে এই ধরনের মেট্রিকগুলি সাধারণ ব্যক্তির জন্য কতটা স্বজ্ঞাগত হবে। আমি আরও চাক্ষুষ কিছু খুঁজছি। আমি চাই যে ফলাফলের ব্যাখ্যা দেওয়ার ব্যক্তিটি মডেল যখন কোন কিছু 70% ঘটবে তখনই এটি ঘটতে পারে ~ 70% সময়, ইত্যাদির সম্ভাবনা থাকে কিনা এমনটি মডেল যখন পূর্বাভাস দেয় তখন তা দেখতে সক্ষম হয়ে উঠতে সক্ষম হয় to

আমি কিউকিউ প্লট শুনেছি (তবে কখনও ব্যবহৃত হয়নি) এবং প্রথমে আমি ভেবেছিলাম এটিই আমি যা খুঁজছিলাম। তবে, এটি সম্ভবত দুটি সম্ভাব্য বন্টনকে তুলনার জন্য বোঝানো হয়েছে । আমার কাছে যা আছে তা সরাসরি নয়। আমার কাছে এক নজির জন্য আমার পূর্বাভাসের সম্ভাবনা এবং তারপরে ঘটনাটি আসলে ঘটেছে কিনা:

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

তাহলে কি কিউকিউ প্লট আসলেই আমি যা চাই, বা আমি কি অন্য কিছু খুঁজছি? যদি কোন কিউকিউ প্লটটি আমার ব্যবহার করা উচিত তবে আমার ডেটা সম্ভাব্যতা বন্টনে রূপান্তরিত করার সঠিক উপায় কী?

আমি কল্পনা করেছিলাম যে আমি উভয় কলামকে পূর্বাভাসের সম্ভাব্যতা অনুসারে বাছাই করতে পারি এবং তারপরে কয়েকটি বিনগুলি তৈরি করতে পারি। আমার যে ধরণের কাজ করা উচিত সেটাই কি আমি বা আমার কোথাও চিন্তাভাবনা বন্ধ করে দিচ্ছি? আমি বিভিন্ন বিচক্ষণ প্রযুক্তির সাথে পরিচিত, তবে বিন্যাসে বিচক্ষণ করার কোনও নির্দিষ্ট উপায় আছে যা এই ধরণের জিনিসটির জন্য আদর্শ?

উত্তর:


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মান অবশ্যই ( হয় না) বা (ঘটেছিল)। (এটি নীচের প্রথম চিত্রটিতে ধূসর খোলা চেনাশোনাগুলির পটভূমি হিসাবে প্রদর্শিত হবে)) এই প্লটের জন্য মসৃণকরণ প্রয়োজন। এটি করার জন্য, আমরা ডেটা বিন করি। ফাংশন বিভাজন দ্বারা ভাগ করে দেয় does এটির প্রথম যুক্তিটি 1 এবং (দ্বিতীয় তর্ক) এর মধ্যে এক ধরণের অ্যারে । এটি প্রতিটি বিনের জন্য স্বতন্ত্র (সংখ্যাসূচক) শনাক্তকারীদের ফেরত দেয়:101mletterrn

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)

বিশ্লেষণ পুনরাবৃত্তি এই চক্রান্ত উত্পাদন করে যেখানে বিচ্যুতি পরিষ্কার:

চিত্র ২

এই মডেল অত্যধিক প্রতিরোধী হতে থাকে (50% থেকে 90% পরিসরে পূর্বাভাসের গড় ফলাফল খুব কম)। ভবিষ্যদ্বাণী কম (30% এরও কম) এমন কয়েকটি ক্ষেত্রে, মডেলটি খুব হতাশাবাদী।


(+1) খুব সুন্দর, ধন্যবাদ। আমি মনে করি রঙগুলি উদ্দেশ্য থেকে কিছুটা বিভ্রান্ত হতে পারে তবে বাকীটি ছিল একটি দুর্দান্ত ধারণা এবং খুব সুন্দর ব্যাখ্যা।
মাইকেল ম্যাকগোয়ান

মাইকেল, আমি দেখতে পেয়েছি যে খুব ছোট চেনাশোনাগুলির উভয় প্রান্তে দেখতে সহায়তা করার জন্য কিছু রঙের প্রয়োজন ছিল। একটি ধ্রুবক রঙ অবশ্যই এটি সম্পাদন করবে। col=colorsআপনার পছন্দ মতো রঙের দ্বারা প্রতিস্থাপন করুন col="Red"
হুবুহু

+1, এটি খুব সুন্দর। যাইহোক, আমি যথেষ্ট অন্তর্নিহিত না কেন রেফারেন্সটি সঠিক লজিস্টিক রিগ্রেশন লাইনের পরিবর্তে একটি সরল, সোজা 45 ডিগ্রি লাইন, বা একটি লয়েস? আমার মনে করা উচিত যেগুলি ভবিষ্যতবাণীগুলির গুণমান বিচার করার জন্য এটি আরও উপযুক্ত উল্লেখযোগ্য হবে।
গুং - মনিকা পুনরায়

পিপি±[0,1]×[0,1]
whuber

পি(1-পি)/এনপিএন

4

আরেকটি বিকল্প হ'ল আইসোটোনিক রিগ্রেশন। এটি আউটপুটগুলির কঠোরভাবে বৃদ্ধি পাচ্ছে এমন একটি প্রয়োজনীয়তার সাথে, অর্ধে ভাগ করে দেয়ার পরিবর্তে গতিসম্পন্নভাবে জিনগুলি তৈরি করা বাদে এটি whuber এর উত্তরের অনুরূপ।

আইসোটোনিক রিগ্রেশনের এই প্রাথমিক ব্যবহারটি হ'ল যদি আপনার সম্ভাবনাগুলি খারাপভাবে ক্যালিব্রেট করা না দেখানো হয় তবে তা দৃশ্যধারণের জন্যও ব্যবহার করা যেতে পারে rec মূলত, যদি আইসোটোনিক রিগ্রেশন লাইন মোটামুটি 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
ভিগনেট লিঙ্কটি আর কাজ করে না এবং প্রথম ক্র্যান লিঙ্কটিতে আর একটি ভিগনেট নেই বলে মনে হয়।
বিএলটি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.