পরিসংখ্যান সংক্রান্ত সফ্টওয়্যার পরীক্ষা করা হচ্ছে


10

পরিসংখ্যান সংক্রান্ত সফ্টওয়্যার পরীক্ষায় কোন কৌশল / পদ্ধতিগুলি কার্যকর? আমি বিশেষত এমন প্রোগ্রামগুলিতে আগ্রহী যা সর্বাধিক সম্ভাবনা ব্যবহার করে প্যারামিট্রিক অনুমান করে।

অন্যান্য প্রোগ্রাম বা প্রকাশিত উত্স থেকে প্রাপ্তদের সাথে ফলাফলের তুলনা করা সবসময় সম্ভব না কারণ আমি নিজের প্রোগ্রাম লিখি বেশিরভাগ সময় এটি কারণ এটি যে কম্পিউটারটি আমার প্রয়োজন তা ইতিমধ্যে একটি বিদ্যমান সিস্টেমে প্রয়োগ করা হয়নি।

আমি এমন পদ্ধতির প্রতি জোর দিচ্ছি না যা নির্ভুলতার গ্যারান্টি দিতে পারে। আমি এমন কৌশলগুলির সাথে খুশি হব যা কিছু ত্রুটির ভগ্নাংশ ধরতে পারে।

উত্তর:


8

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

  • হে(এন  এন)হে(এন2)

  • এন>পিপি>এন

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

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

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


5

এটি সত্যই আপনার প্রশ্নের উত্তর কিনা তা নিশ্চিত নন, তবে এটি কমপক্ষে স্পর্শকাতরভাবে সম্পর্কিত।

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

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

    with(Statistics):
    infolevel[Statistics] := 1:
    distribution := CauchyDistribution(2, 3):
    sample := Sample(distribution, 10^6):
    ChiSquareSuitableModelTest(sample, distribution, 'bins' = 100, 'level' = 0.001);
    

    α

  2. সীমাবদ্ধ মুহুর্তগুলির সাথে বিতরণের জন্য, আমি একদিকে বেশ কয়েকটি নমুনা মুহুর্তগুলি গণনা করি এবং অন্যদিকে, আমি সম্পর্কিত বিতরণের মুহুর্তগুলি এবং তাদের আদর্শ ত্রুটির প্রতীকীভাবে গণনা করি। সুতরাং যেমন বিটা বিতরণ:

    with(Statistics):
    distribution := BetaDistribution(2, 3):
    distributionMoments := Moment~(distribution, [seq(1 .. 10)]);
    standardErrors := StandardError[10^6]~(Moment, distribution, [seq(1..10)]);
    evalf(distributionMoments /~ standardErrors);
    

    106

    with(Statistics):
    sample := Sample(BetaDistribution(2, 3), 10^6):
    sampleMoments := map2(Moment, sample, [seq(1 .. 10)]);
    distributionMoments := [2/5, 1/5, 4/35, 1/14, 1/21, 1/30, 4/165, 1/55, 2/143, 1/91];
    standardErrors := 
      [1/5000, 1/70000*154^(1/2), 1/210000*894^(1/2), 1/770000*7755^(1/2), 
       1/54600*26^(1/2), 1/210000*266^(1/2), 7/5610000*2771^(1/2), 
       1/1567500*7809^(1/2), 3/5005000*6685^(1/2), 1/9209200*157366^(1/2)];
    deviations := abs~(sampleMoments - distributionMoments) /~ standardErrors;
    

    উপরের প্রথম রান থেকে আসা distributionMomentsএবং standardErrorsআসা সংখ্যাগুলি । এখন যদি নমুনা জেনারেশনটি সঠিক হয় তবে বিচ্যুতির সংখ্যা তুলনামূলকভাবে কম হওয়া উচিত। আমি ধরে নিলাম এগুলি প্রায় সাধারণভাবে বিতরণ করা হয়েছে (যা তারা সত্যই নয়, তবে এটি যথেষ্ট কাছাকাছি আসে - এগুলি নমুনা মুহুর্তগুলির আকারযুক্ত সংস্করণ নয়, নমুনাগুলি নিজেরাই নয়) এবং এইভাবে আমি উদাহরণস্বরূপ এমন কোনও ক্ষেত্রে পতাকা আনতে পারি যেখানে কোনও বিচ্যুতি ঘটে flag 4 এর চেয়ে বেশি - একটি নমুনা মুহুর্তের সাথে সম্পর্কিত যা বিতরণের মুহুর্ত থেকে চারগুণ বেশি স্ট্যান্ডার্ড ত্রুটি বিচ্যুত করে। নমুনা জেনারেশন ভাল হলে এটি এলোমেলোভাবে হওয়ার সম্ভাবনা খুব কম। অন্যদিকে, যদি প্রথম 10 টি নমুনা মুহুর্তগুলি বিতরণের মুহুর্তগুলিকে অর্ধ শতাংশেরও কম সময়ের সাথে মেলে, তবে আমাদের কাছে বিতরণের মোটামুটি ভাল আনুমানিকতা রয়েছে।

এই দুটি পদ্ধতিই কেন কাজ করে তার মুলত হ'ল নমুনা জেনারেশন কোড এবং প্রতীকী কোডটি পুরোপুরি বিচ্ছিন্ন। যদি উভয়ের মধ্যে ওভারল্যাপ হয়, তবে সেই ওভারল্যাপের একটি ত্রুটি নমুনা জেনারেশনে এবং তার যাচাইকরণে উভয়ই প্রকাশ পেতে পারে এবং তাই ধরা পড়ে না।


আপনার উত্তরের জন্য ধন্যবাদ. আমি কেবলমাত্র একটি বেছে নেওয়ার অনুমতি পাওয়ায় আমি অন্য উত্তরটি "গ্রহণ" করছি এবং এটি আমার বর্তমান পরিস্থিতিটি আরও ভালভাবে ফিট করে বলে মনে হচ্ছে। তবে আপনার উত্তরটি খুব সহায়ক ছিল।
জ্যোতির্ময় ভট্টাচার্য


2

স্টাটা জার্নালের এই নিবন্ধে স্টাটাকার্পের রাষ্ট্রপতি উইলিয়াম গোল্ড অনেক বিশদ বিবরণ দিয়েছেন। 1 এটি পরিসংখ্যানগত সফ্টওয়্যারটির মান নিয়ন্ত্রণ সম্পর্কে একটি খুব আকর্ষণীয় নিবন্ধ is

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.