लॉजिस्टिक रिग्रेशन-आधारित मॉडल की सटीकता को मापना


26

मेरे पास एक प्रशिक्षित लॉजिस्टिक रिग्रेशन मॉडल है जिसे मैं एक परीक्षण डेटा सेट पर लागू कर रहा हूं। आश्रित चर द्विआधारी (बूलियन) है। परीक्षण डेटा सेट में प्रत्येक नमूने के लिए, मैं एक% संभावना उत्पन्न करने के लिए लॉजिस्टिक रिग्रेशन मॉडल लागू करता हूं जो निर्भर चर सत्य होगा। फिर मैं रिकॉर्ड करता हूं कि क्या एक्यूट वैल्यू सही थी या गलत। मैं एक रेखीय प्रतिगमन मॉडल के रूप में एक या समायोजित आकृति की गणना करने की कोशिश कर रहा हूं ।आर 2R2R2

यह मुझे परीक्षण सेट में प्रत्येक नमूने के लिए एक रिकॉर्ड देता है:

prob_value_is_true         acutal_value
   .34                          0
   .45                          1
   .11                          0
   .84                          0
    ....                        ....          

मैं सोच रहा हूं कि मॉडल की सटीकता का परीक्षण कैसे किया जाए। मेरा पहला प्रयास एक आकस्मिक तालिका का उपयोग करना था और "अगर prob_value_is_true> 0.80, का अनुमान है कि वास्तविक मूल्य सत्य है" और फिर गलत वर्गीकरण के लिए सही के अनुपात को मापें। लेकिन मुझे यह पसंद नहीं है, क्योंकि ऐसा लगता है कि मैं सिर्फ 0.80 का एक सीमा के रूप में मूल्यांकन कर रहा हूं, न कि पूरे और सभी prob_value_is_trueमूल्यों पर मॉडल की सटीकता ।

फिर मैंने प्रत्येक प्रॉब्लम_वल्यू_आईएस_ट्र्यू डिस्क्रीट वैल्यू को देखने की कोशिश की, उदाहरण के तौर पर, सभी नमूनों prob_value_is_trueको देखने के लिए = = 0.34 और उन नमूनों का% मापना, जहां एक्यूट वैल्यू सही है (इस मामले में, सही सटीकता होगी यदि सैंपल का% यह सच था = 34%)। मैं प्रत्येक असतत मान पर अंतर को जोड़कर एक मॉडल सटीकता स्कोर बना सकता हूं prob_value_is_true। लेकिन यहाँ नमूना आकार एक बहुत बड़ी चिंता का विषय है, विशेष रूप से चरम (लगभग 0% या 100%) के लिए, जैसे कि एक्यूट वैल्यू का औसत सटीक नहीं है, इसलिए मॉडल सटीकता को मापने के लिए उनका उपयोग करना सही नहीं लगता है।

मैंने पर्याप्त नमूना आकार (0-.25, .25-.50, .50-75, .75-1.0) सुनिश्चित करने के लिए विशाल रेंज बनाने की कोशिश की, लेकिन वास्तविक मूल्य के उस% के "अच्छाई" को कैसे मापें । सभी नमूने कहें, जहां prob_value_is_true0.25 और 0.50 के बीच औसतन acutal_value0.45 है। क्या इसकी सीमा में अच्छा है? 37.5% (रेंज का केंद्र) के पास बुरा नहीं है?

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


मुझे लगता है कि पर्वतमाला उदाहरण: (0 -25, .25 -50 .50 .50-.75, .75-1.0) का अर्थ है। यदि आप पर्वतमाला को संकीर्ण करते हैं तो क्या यह सहायक होगा? जैसे: 0-.03, .03-.06, .06-.09, ..... यानी, हर .03। यह कई डेटा पॉइंट वाले क्षेत्रों के लिए उपयोगी हो सकता है।
मैक

जवाबों:


18

एक उपाय जो अक्सर लॉजिस्टिक रिग्रेशन को मान्य करने के लिए उपयोग किया जाता है, वह है आरओसी वक्र (1-विशिष्टता के खिलाफ संवेदनशीलता की साजिश - यदि आवश्यक हो तो शर्तों के लिए सिर्फ Google)। यह, संक्षेप में, दहलीज मूल्यों की पूरी श्रृंखला का मूल्यांकन करता है।

नकारात्मक पक्ष पर: थ्रेशोल्ड मानों की संपूर्ण श्रेणी का मूल्यांकन वह नहीं हो सकता है जो आप इसके बाद करते हैं, क्योंकि इसमें (आमतौर पर) थ्रेसहोल्ड शामिल होते हैं जिसके परिणामस्वरूप बहुत बड़ी संख्या में गलत नकारात्मक या गलत सकारात्मकताएं होती हैं। एयूसी के संस्करण हैं जो इस (आंशिक एयूसी) के लिए खाते हैं, इसलिए यदि यह आपके लिए एक मुद्दा है, तो आप उस पर गौर कर सकते हैं।


1
एक क्षण के लिए एयूसी को अलग करना, क्या मैं आरओसी वक्र के निर्माण को सही मान रहा हूं? Prob_value_is_true के प्रत्येक असतत मान के लिए, असतत मान को एक सीमा के रूप में उपयोग करके एक आकस्मिक तालिका बनाएं। फिर प्रत्येक आकस्मिक तालिका की सही सकारात्मक दर और झूठी सकारात्मक दर रिकॉर्ड करें। एक स्कैटरप्लॉट पर सभी आकस्मिक तालिकाओं के लिए दर प्लॉट करें और आपको आरओसी वक्र देखना चाहिए? क्या यह सही है?
जॉन रीड ने

मैंने इसे करने के लिए कुछ कोड एक साथ रखा, बस यादृच्छिक मानों को संभाव्यता और वास्तविक मान के रूप में खिलाया, और यह एक सीधी रेखा थी। मुझे लगता है कि AUC "लाइन" या यादृच्छिकता से फिर से फिट मॉडल से "वक्र" के विचलन को माप रहा है?
जॉन रीड

ROC के बारे में: हाँ, यह सही है। कुछ वेरिएंट हैं (कम या ज्यादा स्मूथ), ध्यान में रखते हुए आपकी पसंद की थ्रेसहोल्ड या नहीं पसंद की संभावनाएँ। ध्यान दें कि (आपके उपयोग किए गए सॉफ़्टवेयर / पसंद की भाषा पर निर्भर करता है) वहाँ बाहर असंख्य उपकरण हैं जो पहले से ही यह प्रदान करते हैं। राइट एयूसी: यह आरओसी वक्र के तहत वास्तविक क्षेत्र से अधिक या कम नहीं है। एक परिपूर्ण यादृच्छिक भविष्यवक्ता के साथ नहीं, आरओसी वक्र 0 (0,0) से (1,1) तक एक सीधी रेखा होगी, जिसके परिणामस्वरूप 0.5 का एयूसी होगा। AUC की कुछ अच्छी व्याख्याएँ हैं, हालाँकि (Google या विकिपीडिया भी :-) देखें)
Nick Sabbe

8

आप अनुपातिक रूप से वर्गीकृत अनुपात के बारे में चिंता करने के लिए सही हैं क्योंकि मुख्य रूप से एक मनमानी सीमा के प्रभाव को दर्शाती है। मैं दो उपाय सुझाऊँगा। एक -index या ROC क्षेत्र है जैसा कि अन्य लोगों ने वर्णन किया है। इसकी एक व्याख्या है जो एक आरओसी वक्र के बारे में सोचने से अधिक सरल है, और शुद्ध भविष्य कहनेवाला भेदभाव का एक उपाय है। दूसरे, डेटा के किसी भी बाइनिंग के बिना एक निरंतर अंशांकन वक्र का अनुमान लगाएं। यदि भविष्य के डेटासेट पर भविष्यवाणियों का मूल्यांकन किया जा रहा है, तो आप पूर्वानुमानित और वास्तविक प्रोब [Y = 1] के बीच के संबंध का अनुमान लगाने के लिए बाहरी खोज का उपयोग कर सकते हैं । आर में समारोह पैकेज इन बातों के दोनों करेंगे। में अन्य कार्यसीlowessval.probrmsrms आंतरिक सत्यापन के लिए भी ऐसा ही होगा, ओवरफिटिंग के प्रभावों को दूर करने के लिए रेज़मैपलिंग का उपयोग करना।


6

यदि आपका डेटा मानों द्वारा समूहीकृत है , तो आप मॉडल की अनुमानित मान की गणना कर सकते हैं और यह आत्मविश्वास से जुड़ा अंतराल है, और देखें कि क्या मनाया गया प्रतिशत उस सीमा के भीतर आता है। उदाहरण के लिए, यदि आप 10 टिप्पणियों पर था एक्स = 10 10 ओ बीएस पर, एक्स = 20 10 ओ बीएस पर, एक्स = 30 , आदि, तो , आदि, प्रतिशत है कि भविष्यवाणियों की तुलना में किया जा सकता है प्राप्त करेगी। ध्यान रखें, कि भले ही मॉडल सही हो, कुछ मनाया प्रतिशत 95% सीआई के बाहर उछलेगा, ठीक उसी तरह जैसे ओएलईडी रिग्रेशन में होता है। यदि आपका डेटा समूहीकृत नहीं है, तो आप x की श्रेणियों के अनुसार डेटा को कम करके अपने समूह बना सकते हैंxx=10x=20x=30mean(y[x==10]==1)mean(y[x==20]==1)xचर, जैसा कि आप सुझाव देते हैं। यह पूरी तरह से मान्य नहीं है, क्योंकि यह डिब्बे की पसंद पर निर्भर करेगा, आपके मॉडल की खोज के तरीके के रूप में उपयोगी हो सकता है।

सामान्य तौर पर, आपने खुद को यहां जो काम दिया है, वह कठिन है। ऐसा इसलिए, क्योंकि लॉजिस्टिक रिग्रेशन के साथ, आप दो अलग-अलग तरह की चीजों से निपट रहे हैं। मॉडल की भविष्यवाणियां एक अव्यक्त चर होती हैं, जबकि आपका मनाया गया प्रतिक्रिया चर (जबकि एक अव्यक्त चर द्वारा उत्पन्न) नहीं है। बेशक, लोग अक्सर जानना चाहेंगे कि अनुमानित प्रतिक्रिया क्या है, और यह पूरी तरह से उचित है; यह उन मामलों में से एक है जहां जीवन निष्पक्ष नहीं है।

यदि आप परिणाम की भविष्यवाणी करना चाहते हैं, तो आपको यह तय करने की आवश्यकता है कि आप क्या अधिकतम करना चाहते हैं। तुम सिर्फ 1 मामला है, और आप अपने भविष्यवाणी सबसे सही होने की संभावना होने के लिए चाहते हैं, तो आप की भविष्यवाणी करना चाहिए , अगर y.5 । (यह सभी बहुत सहज है।) दूसरी ओर, यदि आप अपने कुल नमूना से अधिक समग्र सटीकता (या किसी अन्य समूह) अधिकतम करने के लिए चाहते हैं, आप की भविष्यवाणी करना चाहिए y = 1 , अगर yपी ( y = 1 ) । उदाहरण के लिए, मान लें कि आपके नमूने में, सभी मामलों का 30% 1 के हैं, तो अगर जाने y = 0.31y=1y^.5y=1y^p(y=1)y^=.31, आपको यह अनुमान लगाना चाहिए कि 1 होगा , भले ही यह < .5 हो । यह प्रति-सहज ज्ञान युक्त है, और बहुत सारे लोग यहां ठोकर खाते हैं, लेकिन यह एल्गोरिथ्म आपकी सटीकता को अधिकतम करेगा। y1<.5

(0,1)R2R2c


बहुत बढ़िया जवाब! इसलिए उदाहरण में कि सभी मामलों में से 30% 1 हैं, किसी विशेष मामले की 0.31 की भविष्यवाणी की संभावना इस मामले की "रैंकिंग" की तरह है जो अन्य मामलों के सापेक्ष 1 (कितना बड़ा) है? और इसे अनुमानित संभावना के रूप में नहीं देखा जाना चाहिए कि यह विशेष मामला 1 है?
मैक

1
y^i=.311.31.31.25

3

मुझे लगता है कि आप एक थ्रेशोल्ड स्थापित कर सकते हैं (0.5 का कहना है), इसलिए जब आपकी संभावना उस थ्रेशोल्ड के बराबर या उससे अधिक होती है तो आपकी अनुमानित कक्षा 1 होगी, और 0 अन्यथा। फिर, आप इस तरह से अपनी सटीकता का माप प्राप्त कर सकते हैं:

confusion_matrix <- ftable(actual_value, predicted_value)
accuracy <- sum(diag(confusion_matrix))/number of events*100

यह देखते हुए कि आपकी प्रायिकता आपके डेटा (x) को दिए जाने की संभावना है और आपके मॉडल का उपयोग करके आपकी क्लास वैल्यू (y) 1 के बराबर है, मुझे समझ नहीं आता कि आप हमेशा संभावना मान 0.5 से कम क्यों प्राप्त करते हैं। आपकी वास्तविक कक्षाओं की आवृत्ति क्या है (real_value)?


2

आप मेरे पैकेज को देखना चाह सकते हैं softclassval(softclassval.r-forge.r-project.org पर आप दो मौखिक प्रस्तुतियाँ पाते हैं जो मैंने पैकेज के पीछे के विचारों के बारे में दी हैं)।

मैंने इसे थोड़ी अलग समस्या के लिए लिखा था, अर्थात् यदि संदर्भ (जैसे रोगविज्ञानी) स्पष्ट वर्ग देने के लिए "मना" करता है। हालांकि, आप इसे "सामान्य" हार्ड कक्षाओं के साथ उपयोग कर सकते हैं और यह मूल रूप से निरंतर भविष्यवाणी को सख्त करने के लिए एक सीमा की परिभाषा से बचा जाता है - इसलिए आप 0.8 का मूल्यांकन नहीं करते हैं।

हालांकि, मैं इसके साथ उपयोग करने की सलाह देता हूं, कहते हैं, एक आरओसी या विशिष्टता-संवेदनशीलता-आरेख: परिणाम अक्सर बहुत खराब दिखेंगे क्योंकि "मेरे" तरीके पहले से ही मामूली विचलन को दंडित करेंगे (जैसे कि 1 के बजाय 0.9 मेरे उपायों के लिए 0.1 अंतर देता है। , लेकिन 0.9 से नीचे सभी थ्रेसहोल्ड इसे अनदेखा करेंगे)। वास्तव में मुझे लगता है कि यह एक फायदा है: इस संवेदनशीलता के अभाव में छोटे विचलन, उन "कठोर" उपायों जैसे कि सटीकता, संवेदनशीलता, याद, आदि के साथ आलोचना के प्रमुख बिंदु हैं।

इसके अलावा, माध्य निरपेक्ष त्रुटि (MAE) और मूल माध्य चुकता त्रुटि RMSE की तुलना करके आप यह पता लगा सकते हैं कि आपके पास कई छोटे विचलन हैं या कम गलत तरीके से गलत नमूने हैं।


1

Pri=invlogit(a+bxi)

y.rep[i]Bernoulli(p[i])

फिर, इस अनुकरण को चलाएं, कहते हैं, 100 बार। आपके पास n पंक्तियों के साथ एक मैट्रिक्स होगा (n विषयों की संख्या है) और k कॉलम (इस मामले में, k = 100, सिमुलेशन की संख्या)। आर कोड में:

for (j  in 1:100)
  mat.y.rep[,j] <- Bernoulli ( p) # p is a vector with a probability for each subject

अब आप प्रत्येक अनुकार में देखे गए और देखे गए के बीच अंतर की गणना करते हैं। इस अंतर की गणना करने के बाद, बस प्रत्येक पंक्ति (प्रत्येक विषय) के लिए सही-सकारात्मक और झूठे-सकारात्मक के माध्य संख्या की गणना करें और हिस्टोग्राम की साजिश करें। या दोनों प्रत्येक स्तंभ (सिमुलेशन) के लिए गणना करें हिस्टोग्राम (मुझे यह पसंद है) की साजिश है।

आशा करता हूँ की ये काम करेगा...


1

ऐसी भविष्यवाणियों की सटीकता का अनुमान लगाने के कई तरीके हैं और इष्टतम विकल्प वास्तव में इस बात पर निर्भर करता है कि अनुमान किसके लिए लागू होगा।

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

व्यावहारिक पक्ष पर, Rके ROCRपैकेज 2 उपयोगी कार्यों में शामिल है

pred.obj <- prediction(predictions, labels,...)
performance(pred.obj, measure, ...)

साथ में, इन कार्यों सटीकता उपायों की एक विस्तृत श्रृंखला, वैश्विक अदिश मूल्यों (जैसे सहित गणना कर सकते हैं "एयूसी" और स्कोर पर निर्भर याद परिशुद्धता और आरओसी घटता (साजिश रचने के लिए वैक्टर) "prec" , "आरईसी" , "TPR" और "fpr" , आदि)


1

आपको "सटीकता" से मतलब है कि आपको परिभाषित करने की आवश्यकता है। आप क्या जानना चाहते हैं, कृपया मुझे अपने मुंह में शब्द डालने के लिए क्षमा करें, आपका मॉडल प्रशिक्षण डेटा को कितनी अच्छी तरह से फिट बैठता है, और इससे भी महत्वपूर्ण बात यह है कि यह मॉडल आपके प्रशिक्षण डेटा में नहीं नमूने के लिए "सामान्यीकृत" करता है। यद्यपि आरओसी कर्व्स सटीक और थ्रेशोल्ड के विभिन्न मूल्यों के लिए ट्रेडऑफ़ का विश्लेषण करने में उपयोगी हो सकते हैं, लेकिन मैं सुझाव देता हूं कि आपके टूलबॉक्स में मीन-स्क्वॉयर-एरर या ब्रियर स्कोर को जोड़ा जाए। यह गणना करना आसान है, और आप तुरंत महसूस कर सकते हैं कि क्या प्रशिक्षण परिवर्तन मॉडल के फिट को प्रभावित करते हैं, जब प्रशिक्षण डेटा पर लागू किया जाता है। चूंकि इस मामले में ओवरफिट संभव है, इसलिए आपका काम यहां नहीं हुआ है। सामान्यीकरण प्रदर्शन का मूल्यांकन करने के लिए, या आपने जो डेटा नहीं देखा है, वह कितना अच्छा है प्रशिक्षण के नमूनों पर अपने प्रदर्शन को देखने के लिए पर्याप्त नहीं है। बेशक आपका मॉडल उन पर अच्छा है, क्योंकि वे आपके लॉजिस्टिक के गुणांक निर्धारित करने के लिए आपके द्वारा उपयोग किए जाने वाले मूल्य हैं। आपको परीक्षण डेटा के लिए कुछ नमूने सेट करने की आवश्यकता है। इस सेट पर आपके एमएसई प्रदर्शन को हॉफिंग असमानता के अनुसार आपकी सामान्यीकरण अपेक्षाओं को निर्धारित करना चाहिए। आपकी अधिकतम सामान्यीकरण त्रुटि आपके मॉडल में सुविधाओं की संख्या के साथ-साथ परीक्षण सांख्यिकीय की गणना करने के लिए उपयोग किए जाने वाले नमूनों की संख्या पर निर्भर करेगी। ध्यान रखें कि आपको परीक्षण नमूनों के लिए अपने कुछ प्रशिक्षण नमूने चोरी करने होंगे। मैं 10-गुना क्रॉस-सत्यापन की सलाह देता हूं, जहां आप फेरबदल करते हैं, प्रशिक्षण के लिए 90%, परीक्षण के लिए 10% और फिर माप, दोहराने और फिर सभी मापों को औसत करने के लिए चुनते हैं। क्योंकि वे आपके लॉजिस्टिक के गुणांक निर्धारित करने के लिए आपके द्वारा उपयोग किए गए मान हैं। आपको परीक्षण डेटा के लिए कुछ नमूने सेट करने की आवश्यकता है। इस सेट पर आपके एमएसई प्रदर्शन को हॉफिंग असमानता के अनुसार आपकी सामान्यीकरण अपेक्षाओं को निर्धारित करना चाहिए। आपकी अधिकतम सामान्यीकरण त्रुटि आपके मॉडल में सुविधाओं की संख्या के साथ-साथ परीक्षण सांख्यिकीय की गणना करने के लिए उपयोग किए जाने वाले नमूनों की संख्या पर निर्भर करेगी। ध्यान रखें कि आपको परीक्षण नमूनों के लिए अपने कुछ प्रशिक्षण नमूने चोरी करने होंगे। मैं 10-गुना क्रॉस-सत्यापन की सलाह देता हूं, जहां आप फेरबदल करते हैं, प्रशिक्षण के लिए 90%, परीक्षण के लिए 10% और फिर माप, दोहराने और फिर सभी मापों को औसत करने के लिए चुनते हैं। क्योंकि वे आपके लॉजिस्टिक के गुणांक निर्धारित करने के लिए आपके द्वारा उपयोग किए गए मान हैं। आपको परीक्षण डेटा के लिए कुछ नमूने सेट करने की आवश्यकता है। इस सेट पर आपके एमएसई प्रदर्शन को हॉफिंग असमानता के अनुसार आपकी सामान्यीकरण अपेक्षाओं को निर्धारित करना चाहिए। आपकी अधिकतम सामान्यीकरण त्रुटि आपके मॉडल में सुविधाओं की संख्या के साथ-साथ परीक्षण सांख्यिकीय की गणना करने के लिए उपयोग किए जाने वाले नमूनों की संख्या पर निर्भर करेगी। ध्यान रखें कि आपको परीक्षण नमूनों के लिए अपने कुछ प्रशिक्षण नमूने चोरी करने होंगे। मैं 10-गुना क्रॉस-सत्यापन की सलाह देता हूं, जहां आप फेरबदल करते हैं, प्रशिक्षण के लिए 90%, परीक्षण के लिए 10% और फिर माप, दोहराने और फिर सभी मापों को औसत करने के लिए चुनते हैं। इस सेट पर आपके MSE प्रदर्शन को हॉफिंग असमानता के अनुसार आपकी सामान्यीकरण अपेक्षाओं को निर्धारित करना चाहिए। आपकी अधिकतम सामान्यीकरण त्रुटि आपके मॉडल में सुविधाओं की संख्या के साथ-साथ परीक्षण सांख्यिकीय की गणना करने के लिए उपयोग किए जाने वाले नमूनों की संख्या पर निर्भर करेगी। ध्यान रखें कि आपको परीक्षण नमूनों के लिए अपने कुछ प्रशिक्षण नमूने चोरी करने होंगे। मैं 10-गुना क्रॉस-सत्यापन की सलाह देता हूं, जहां आप फेरबदल करते हैं, प्रशिक्षण के लिए 90%, परीक्षण के लिए 10% और फिर माप, दोहराने और फिर सभी मापों को औसत करने के लिए चुनते हैं। इस सेट पर आपके MSE प्रदर्शन को हॉफिंग असमानता के अनुसार आपकी सामान्यीकरण अपेक्षाओं को निर्धारित करना चाहिए। आपकी अधिकतम सामान्यीकरण त्रुटि आपके मॉडल में सुविधाओं की संख्या के साथ-साथ परीक्षण सांख्यिकीय की गणना करने के लिए उपयोग किए जाने वाले नमूनों की संख्या पर निर्भर करेगी। ध्यान रखें कि आपको परीक्षण नमूनों के लिए अपने कुछ प्रशिक्षण नमूने चोरी करने होंगे। मैं 10-गुना क्रॉस-सत्यापन की सलाह देता हूं, जहां आप फेरबदल करते हैं, प्रशिक्षण के लिए 90%, परीक्षण के लिए 10% और फिर माप, दोहराने और फिर सभी मापों को औसत करने के लिए चुनते हैं।


1

0log(1p^)01log(p^)1

यह मनमानी थ्रेसहोल्ड से ग्रस्त नहीं है। माप जितना छोटा होगा उतना ही अच्छा होगा।

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