TypeScript में A/B परीक्षण: कॉफी के आधार पर अनुमान न लगाएं

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

A/B परीक्षणों से पहले का जीवन: अंतर्ज्ञान क्यों विफल होता है

\n

क्या आपने कभी डिज़ाइनर से बहस की है कि कौन सा बटन बेहतर है - लाल या नीला? या मैनेजर से कि कौन सा शीर्षक अधिक क्लिक आकर्षित करेगा? पहले ऐसे विवाद ऊंची आवाज या पदानुक्रम में स्थान से तय होते थे। आज हमारे पास TypeScript में A/B परीक्षण है - एक वैज्ञानिक विधि जो अनुमानों को डेटा में बदल देती है।

\n

कल्पना करें: आप एक ऑनलाइन स्टोर चलाते हैं। ऐसा लगता है कि उत्पाद कार्ड पर समीक्षाएँ जोड़ने से बिक्री बढ़ेगी। और यदि आप इमेज कैरोसेल हटाकर एक बड़ी फोटो रख दें? स्प्लिट-परीक्षण के बिना आप कभी सच्चाई नहीं जान पाएंगे। यहीं पर TypeScript मदद करता है - सख्त टाइपिंग और आधुनिक उपकरण A/B परीक्षणों को विश्वसनीय और सुविधाजनक बनाते हैं।

\n\n

सरल शब्दों में A/B परीक्षण क्या है

\n

A/B परीक्षण (जिसे स्प्लिट-परीक्षण भी कहा जाता है) एक प्रयोग है जिसमें उपयोगकर्ताओं के दो समूहों को एक ही तत्व के अलग-अलग संस्करण दिखाए जाते हैं। नियंत्रण समूह (A) वर्तमान संस्करण देखता है, प्रायोगिक समूह (B) संशोधित संस्करण देखता है। फिर हम मीट्रिक्स की तुलना करते हैं: रूपांतरण, साइट पर समय, क्लिक।

\n

यह क्यों महत्वपूर्ण है? क्योंकि अनुभवी प्रोडक्ट मैनेजर भी 70% मामलों में गलती करते हैं। A/B परीक्षणों के साथ परिकल्पना परीक्षण अंतर्ज्ञान के बजाय डेटा के आधार पर निर्णय लेने की अनुमति देता है। TypeScript इसमें प्रकार सुरक्षा और विकास में सुविधा जोड़ता है।

\n\n

TypeScript अनुप्रयोगों में A/B परीक्षण कैसे काम करता है

\n

TypeScript अनुप्रयोगों में A/B परीक्षण आमतौर पर इसके माध्यम से कार्यान्वित किया जाता है:

\n
    \n
  • उपयोगकर्ताओं का वितरण - किसी विशिष्ट उपयोगकर्ता को कौन सा संस्करण दिखाना है
  • \n
  • ईवेंट ट्रैकिंग - उपयोगकर्ता क्रियाओं के बारे में डेटा एकत्र करना
  • \n
  • परिणामों का विश्लेषण - सांख्यिकीय महत्व की गणना
  • \n
\n\n

आइए प्रत्येक चरण को एक उदाहरण के साथ देखें। मान लीजिए, हम लॉगिन पेज पर एक नए शीर्षक का परीक्षण करना चाहते हैं। कोड में यह इस प्रकार दिखता है:

\n\n
// प्रयोग के लिए प्रकार परिभाषित करें\ntype ExperimentVariant = 'control' | 'variant';\ntype ExperimentConfig = {\n  id: string;\n  variants: ExperimentVariant[];\n  weights: number[]; // योग 100 होना चाहिए\n};\n\n// A/B परीक्षण का कॉन्फ़िगरेशन\nconst headlineExperiment: ExperimentConfig = {\n  id: 'headline_test_2024',\n  variants: ['control', 'variant'],\n  weights: [50, 50] // 50% पुराना शीर्षक देखते हैं, 50% नया\n};\n\n// यादृच्छिक वितरण फ़ंक्शन\nfunction assignVariant(config: ExperimentConfig): ExperimentVariant {\n  const random = Math.random() * 100;\n  let cumulativeWeight = 0;\n  \n  for (let i = 0; i < config.variants.length; i++) {\n    cumulativeWeight += config.weights[i];\n    if (random < cumulativeWeight) {\n      return config.variants[i];\n    }\n  }\n  \n  return config.variants[0]; // fallback\n}\n\n// उपयोग\nconst userVariant = assignVariant(headlineExperiment);\nconsole.log(`उपयोगकर्ता को संस्करण मिलेगा: ${userVariant}`);\n
\n\n

उपयोगकर्ता विभाजन: भ्रम से बचने के लिए

\n

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

\n\n
function getStableVariant(\n  userId: string, \n  config: ExperimentConfig\n): ExperimentVariant {\n  // नियतात्मक वितरण के लिए userId का हैश उपयोग करें\n  const hash = simpleHash(userId + config.id);\n  const normalizedHash = hash % 100;\n  \n  let cumulativeWeight = 0;\n  for (let i = 0; i < config.variants.length; i++) {\n    cumulativeWeight += config.weights[i];\n    if (normalizedHash < cumulativeWeight) {\n      return config.variants[i];\n    }\n  }\n  \n  return config.variants[0];\n}\n\nfunction simpleHash(str: string): number {\n  let hash = 0;\n  for (let i = 0; i < str.length; i++) {\n    const char = str.charCodeAt(i);\n    hash = ((hash << 5) - hash) + char;\n    hash |= 0; // Conv                

ब्लॉग

पुस्तक अनुशंसाएँ