অধ্যায় 4 · পরিসংখ্যান: সৎভাবে ডেটা পড়া
নমুনা, গড় আর আপনি কতটা নিশ্চিত হতে পারেন
- পৃষ্ঠা 12 / 17
- 3 মিনিট পড়া
পুরো ডেটা আপনি প্রায় কখনোই দেখেন না। একটা মডেলকে ২০০টা প্রশ্নে পরীক্ষা করেন, ব্যবহারকারীরা যত প্রশ্ন করবেন তার সবগুলোতে নয়। ১,০০০ জনের জরিপ নেন, পুরো দেশের নয়। এই ছোট সেটটা একটা নমুনা, আর মূল প্রশ্ন হলো: এটা যা বলছে তাতে কতটা ভরসা করা যায়?
বড় সংখ্যার নিয়ম
নমুনায় যত বেশি ডেটা, তার গড় আসল মানের তত কাছে যায়। একটা নিরপেক্ষ মুদ্রায় অর্ধেক সময় হেড পড়ে — কিন্তু দেখুন সেটা ধরা পড়তে কত সময় লাগে:
import numpy as np
rng = np.random.default_rng(0)
flips = rng.integers(0, 2, 100_000) # 1 = হেড, 0 = টেল
for n in [10, 100, 1_000, 10_000, 100_000]:
print(f"after {n:>7,} flips: share of heads = {flips[:n].mean():.3f}")after 10 flips: share of heads = 0.400
after 100 flips: share of heads = 0.560
after 1,000 flips: share of heads = 0.537
after 10,000 flips: share of heads = 0.503
after 100,000 flips: share of heads = 0.500১০ বার ছোড়ার পর ৪০% হেড; ১০০ বারের পর ৫৬%। শুধু হাজার হাজার বারের পরই এটা ৫০%-এর কাছে থিতু হয়। ছোট নমুনা এদিক-ওদিক ঘোরে। ১০ বা ২০টা টেস্ট উদাহরণ থেকে টানা সিদ্ধান্ত বেশিরভাগই নয়েজ।
স্ট্যান্ডার্ড এরর: একটা গড়ের অনিশ্চয়তা
স্ট্যান্ডার্ড এরর মাপে নতুন একটা নমুনা নিলে একটা গড় কতটা বদলাত। n-টা উদাহরণে মাপা accuracy p-এর জন্য:
standard error = √( p × (1 − p) / n )বর্গমূলের কারণে চার গুণ ডেটা অনিশ্চয়তা মাত্র অর্ধেক করে। মোটামুটিভাবে, ৯৫% ক্ষেত্রে আসল মান আপনার মাপা মানের দুই স্ট্যান্ডার্ড এররের মধ্যে থাকে — এই পরিসরটাই একটা ৯৫% কনফিডেন্স ইন্টারভাল।
একটা আসল প্রশ্ন: প্রম্পট B কি ভালো?
দুটো প্রম্পট একই ২০০টা প্রশ্নে পরীক্ষা করলেন। A ৮৬% সঠিক, B ৮৮%। B কি ভালো? বুটস্ট্র্যাপ কোনো সূত্র ছাড়াই উত্তর দেয়: ফলাফলগুলো থেকে ফেরত দিয়ে দিয়ে বহুবার নতুন নমুনা নিন, আর দেখুন accuracy কতটা নড়ে:
import numpy as np
rng = np.random.default_rng(11)
# দুটো প্রম্পট, প্রতিটা একই ২০০টা প্রশ্নে পরীক্ষিত (1 = সঠিক)
prompt_a = np.array([1] * 172 + [0] * 28) # ৮৬% সঠিক
prompt_b = np.array([1] * 176 + [0] * 24) # ৮৮% সঠিক
def bootstrap_interval(results, rounds=10_000):
"""ফেরত দিয়ে আবার নমুনা নেওয়া; গড়গুলোর মাঝের ৯৫%-ই ইন্টারভাল।"""
means = [rng.choice(results, size=len(results)).mean() for _ in range(rounds)]
return np.percentile(means, [2.5, 97.5])
for name, r in [("A", prompt_a), ("B", prompt_b)]:
low, high = bootstrap_interval(r)
print(f"prompt {name}: {r.mean():.0%} (95% interval {low:.0%} to {high:.0%})")
se = np.sqrt(0.86 * 0.14 / 200)
print(f"standard error of A: {se:.3f}")prompt A: 86% (95% interval 81% to 90%)
prompt B: 88% (95% interval 84% to 92%)
standard error of A: 0.025দুটো ইন্টারভাল অনেকখানি মিলে যায় (৮১–৯০% আর ৮৪–৯২%)। ২০০টা প্রশ্নে ২ পয়েন্টের পার্থক্য সহজেই ভাগ্য হতে পারে। এত ছোট পার্থক্যে ভরসা করতে আরও টেস্ট প্রশ্ন লাগবে, অথবা বড় ফারাক। এই একটা যাচাই টিমগুলোকে এমন "উন্নতি" চালু করা থেকে বাঁচায়, যা আসলে শুধু নয়েজ — আর গুরুত্ব দিয়ে করা AI মূল্যায়ন ফলাফল ঠিক এভাবেই জানায়।
দুটো প্রম্পট একই প্রশ্নে তুলনা করলে আরও ভালো করা যায়: শুধু সেই প্রশ্নগুলো গুনুন যেখানে তারা আলাদা উত্তর দিয়েছে। একে বলে পেয়ার্ড টেস্ট, আর মূল্যায়নের টুলগুলো এটাই ব্যবহার করে।
নিজে চেষ্টা করুন
- ২,০০০টা প্রশ্নে ৮৬% accuracy-র স্ট্যান্ডার্ড এরর হিসাব করুন। ইন্টারভাল এখন কতটা চওড়া?
- ৪০০টা প্রশ্নে (৩৫২টা সঠিক) প্রম্পট B-এর বুটস্ট্র্যাপ চালান। ইন্টারভালগুলো কি এখনো মেলে?
- মুদ্রার seed কয়েকবার বদলান। ১০ বার ছোড়ায় ০.৫ থেকে কত দূরে যেতে পারে?