कोडिंग साक्षात्कार की तैयारी · पाठ

रिटेंशन मैट्रिक्स बनाना

रिटेंशन तालिका बनाने के लिए कोहोर्ट और अवधि-अंतर के अनुसार सक्रिय उपयोगकर्ताओं की गिनती करना

पाठ 2, कुल 4 में से13 चरण

रिटेंशन मैट्रिक्स बनाना, CoddyKit पर कोडिंग साक्षात्कार की तैयारी का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह कोडिंग साक्षात्कार की तैयारी सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

रिटेंशन मैट्रिक्स क्या है

कोहोर्ट निर्धारित करने के बाद अगला चरण प्रसिद्ध रिटेंशन मैट्रिक्स है: पंक्तियाँ कोहोर्ट होती हैं, स्तंभ अवधि-अंतर होते हैं (माह 0, 1, 2, ...), और हर खाने में यह गिना जाता है कि उस कोहोर्ट के कितने उपयोगकर्ता उस अंतराल पर अभी भी सक्रिय थे।

साक्षात्कारकर्ता इसे बहुत पसंद करते हैं, क्योंकि इसमें आपको कोहोर्ट निर्धारण, गतिविधि से वापस जोड़, अवधि-अंतर की गणना और पिवट को एक साथ करना पड़ता है। यह उत्पाद-विश्लेषण की सबसे प्रतिनिधि क्वेरी है।

दो इनपुट

आपको दो चीज़ों की आवश्यकता है: हर उपयोगकर्ता की कोहोर्ट अवधि (पिछले पाठ से) और हर उपयोगकर्ता की हर सक्रिय अवधि का अभिलेख। गतिविधि उसी घटनाओं की तालिका से आती है, जिसे अवधि की इकाई तक समेटा गया है।

इसलिए क्वेरी की योजना इस प्रकार बनाएँ: पहले कोहोर्ट CTE, फिर एक गतिविधि CTE जिसमें यह सूची हो कि हर उपयोगकर्ता किन महीनों में सक्रिय था, और उसके बाद दोनों को जोड़ें।

WITH user_cohort AS (
  SELECT user_id,
    DATE_TRUNC('month', MIN(event_at)) AS cohort_month
  FROM events
  GROUP BY user_id
)
SELECT * FROM user_cohort;

सक्रिय अवधियों की सूची बनाना

गतिविधि CTE इस प्रश्न का उत्तर देता है: "हर उपयोगकर्ता किन महीनों में सक्रिय था?" हर घटना को महीने तक छोटा करें और DISTINCT या GROUP BY से दोहराव हटाएँ, ताकि मार्च में 40 बार सक्रिय रहने वाले उपयोगकर्ता के लिए मार्च की केवल एक पंक्ति बने।

प्रति-उपयोगकर्ता, प्रति-माह की यही सूची कोहोर्ट से जोड़कर अलग-अलग अंतरालों में उपयोगकर्ता के बने रहने को मापने के लिए उपयोग की जाती है।

WITH activity AS (
  SELECT DISTINCT
    user_id,
    DATE_TRUNC('month', event_at) AS active_month
  FROM events
)
SELECT * FROM activity;

अवधि-अंतर की गणना

मैट्रिक्स का केंद्र अवधि संख्या है: कोई गतिविधि कोहोर्ट के आरंभ के कितने महीने बाद हुई? कोहोर्ट माह को सक्रिय माह से घटाएँ।

पोस्टग्रेज़ में दोनों तारीखों के बीच पूरे महीनों की गिनती करना एक साफ़ तरीका है। अलग-अलग प्रणालियों में चलने वाला सूत्र वर्ष के अंतर को 12 से गुणा करके उसमें महीनों का अंतर जोड़ता है; कई इंजन सहायक साधन भी देते हैं। अंतर 0 का अर्थ है कोहोर्ट का अपना आरंभिक महीना।

-- months between two month-truncated dates (Postgres)
SELECT
  (EXTRACT(YEAR  FROM active_month) - EXTRACT(YEAR  FROM cohort_month)) * 12
+ (EXTRACT(MONTH FROM active_month) - EXTRACT(MONTH FROM cohort_month))
  AS period_number;

समूह को गतिविधि से जोड़ना

समूह CTE को गतिविधि CTE से user_id पर जोड़िए। प्रत्येक परिणाम-पंक्ति बताती है: यह उपयोगकर्ता समूह X में शामिल हुआ और N अंतर पर सक्रिय था। (समूह, अंतर) के अनुसार अलग-अलग उपयोगकर्ताओं की गिनती लंबे प्रारूप में यही आव्यूह है।

क्योंकि समूह का प्रत्येक सदस्य अपने आरंभिक माह में सक्रिय होता है, इसलिए अंतर 0 समूह के आकार के बराबर होना चाहिए। यह एक अंतर्निहित सत्यापन-जाँच है।

WITH user_cohort AS (
  SELECT user_id, DATE_TRUNC('month', MIN(event_at)) AS cohort_month
  FROM events GROUP BY user_id
),
activity AS (
  SELECT DISTINCT user_id, DATE_TRUNC('month', event_at) AS active_month
  FROM events
)
SELECT c.cohort_month, a.active_month, c.user_id
FROM user_cohort c
JOIN activity a ON a.user_id = c.user_id;

लंबे प्रारूप वाली बने रहने की दर की सारणी

अंतर की गणना जोड़कर समुच्चयित कीजिए। अब आपके पास एक सुव्यवस्थित लंबे प्रारूप वाला परिणाम है: प्रत्येक समूह-अंतर के लिए एक पंक्ति और उसमें बने रहने वाले उपयोगकर्ताओं की संख्या। कई साक्षात्कारकर्ता इसे सीधे स्वीकार करते हैं, क्योंकि धुरीकरण केवल प्रस्तुति का मामला है।

ध्यान दें कि अंतर का व्यंजक SELECT और GROUP BY दोनों में दिखाई देता है, क्योंकि इसकी गणना की जाती है; यह पहले से संग्रहित स्तंभ नहीं है।

WITH user_cohort AS (
  SELECT user_id, DATE_TRUNC('month', MIN(event_at)) AS cohort_month
  FROM events GROUP BY user_id
),
activity AS (
  SELECT DISTINCT user_id, DATE_TRUNC('month', event_at) AS active_month
  FROM events
)
SELECT
  c.cohort_month,
  (EXTRACT(YEAR FROM a.active_month)-EXTRACT(YEAR FROM c.cohort_month))*12
  +(EXTRACT(MONTH FROM a.active_month)-EXTRACT(MONTH FROM c.cohort_month)) AS period_number,
  COUNT(DISTINCT c.user_id) AS retained_users
FROM user_cohort c
JOIN activity a ON a.user_id = c.user_id
GROUP BY c.cohort_month, period_number
ORDER BY c.cohort_month, period_number;

विस्तृत स्तंभों में बदलना

पारंपरिक आव्यूह पाने के लिए सशर्त समुच्चयन द्वारा अंतरों को स्तंभों में बदलिए: प्रत्येक अंतर के लिए एक CASE का SUM। यह पोर्टेबल तरीका विशेष PIVOT वाक्यविन्यास के बिना हर एसक्यूएल रूपांतर में काम करता है।

प्रत्येक CASE तब 1 देता है जब पंक्ति की अवधि_संख्या उस स्तंभ से मेल खाती है, इसलिए SUM उस अंतर पर बने रहने वाले उपयोगकर्ताओं की गिनती करता है।

SELECT
  cohort_month,
  COUNT(DISTINCT CASE WHEN period_number = 0 THEN user_id END) AS m0,
  COUNT(DISTINCT CASE WHEN period_number = 1 THEN user_id END) AS m1,
  COUNT(DISTINCT CASE WHEN period_number = 2 THEN user_id END) AS m2,
  COUNT(DISTINCT CASE WHEN period_number = 3 THEN user_id END) AS m3
FROM retention_long
GROUP BY cohort_month
ORDER BY cohort_month;

गिनतियों से बने रहने की दरों तक

साक्षात्कारकर्ता आम तौर पर कच्ची संख्याओं के बजाय प्रतिशत चाहते हैं। प्रत्येक अंतर पर बने रहने वाले उपयोगकर्ताओं की संख्या को समूह के आकार (अंतर 0) से विभाजित कीजिए। पूर्णांक विभाजन से बचने के लिए किसी मान को दशमलव संख्या में बदलने या 1.0 से गुणा करने का उपयोग कीजिए; यही यहाँ होने वाली सबसे आम छिपी हुई गलती है।

परिणाम बने रहने की दर का एक वक्र होता है: माह 0 पर 100%, जो घटते-घटते एक स्थिर स्तर की ओर जाता है। हितधारक वास्तव में इसी स्थिर स्तर वाले माप की परवाह करते हैं।

SELECT
  cohort_month,
  period_number,
  retained_users,
  ROUND(
    100.0 * retained_users
    / MAX(retained_users) OVER (PARTITION BY cohort_month),
    1
  ) AS retention_pct
FROM retention_long
ORDER BY cohort_month, period_number;

पूर्णांक-विभाजन का जाल

साक्षात्कार का एक निश्चित पेचीदा प्रश्न: अधिकांश इंजन में 120 / 500 का परिणाम 0 होता है, 0.24 नहीं, क्योंकि दोनों संक्रियाएँ पूर्णांक हैं। बने रहने की दर के प्रतिशत चुपचाप सभी शून्य आ जाते हैं।

इसे ठीक करने के लिए एक पक्ष को संख्यात्मक बनाइए: 100.0 से गुणा कीजिए, किसी एक संक्रिया को NUMERIC में CAST कीजिए, या खाली समूह से भी बचने के लिए NULLIF(size, 0) से विभाजित कीजिए। यह कहना कि "और NULLIF शून्य से विभाजन को रोकता है" अतिरिक्त अंक दिलाता है।

SELECT
  retained_users,
  cohort_size,
  100.0 * retained_users / NULLIF(cohort_size, 0) AS pct
FROM retention_long;

अनुपस्थित अंतरों को शून्य से भरना

यदि किसी समूह में अंतर 2 पर कोई भी उपयोगकर्ता बना नहीं रहा, तो JOIN कोई पंक्ति नहीं बनाता और आव्यूह में एक रिक्ति रह जाती है। स्पष्ट 0 दिखाने के लिए (समूह, अंतर) संयोजनों का पूरा आव्यूह बनाइए और उसमें गिनतियों को LEFT JOIN कीजिए।

समूहों को संख्याओं/अंतरों की सूची के साथ CROSS JOIN करके पूरा आव्यूह बनाइए, फिर अनुपस्थित गिनतियों को शून्य में बदल दीजिए। साक्षात्कारकर्ता इस बात की सराहना करते हैं कि आपने यह रिक्ति पहचानी।

WITH offsets AS (SELECT generate_series(0, 6) AS period_number),
cohorts AS (SELECT DISTINCT cohort_month FROM retention_long)
SELECT
  c.cohort_month, o.period_number,
  COALESCE(r.retained_users, 0) AS retained_users
FROM cohorts c
CROSS JOIN offsets o
LEFT JOIN retention_long r
  ON r.cohort_month = c.cohort_month
 AND r.period_number = o.period_number
ORDER BY c.cohort_month, o.period_number;

त्रिकोणीय आकार और हालिया-समय का पक्षपात

एक और चर्चा-बिंदु: आव्यूह त्रिकोणीय होता है। जो समूह पिछले माह शुरू हुआ है, उसमें अभी माह-3 का मान नहीं हो सकता, इसलिए बाद के अंतरों में योगदान देने वाले समूह कम होते जाते हैं।

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

त्वरित जाँच

आपकी बने रहने की दर की गणना बने रहने वाले उपयोगकर्ताओं की संख्या को समूह के आकार से विभाजित करती है, लेकिन माह 0 को छोड़कर हर प्रतिशत 0 दिखता है। इसका सबसे संभावित कारण क्या है?

पुनरावलोकन: बने रहने की दर का आव्यूह

साक्षात्कार में बने रहने की दर का आव्यूह बनाने के लिए:

  • प्रत्येक उपयोगकर्ता को एक समूह अवधि दें, फिर प्रत्येक उपयोगकर्ता की सक्रिय अवधियाँ दोहराव हटाकर सूचीबद्ध करें।
  • उन्हें जोड़कर अवधि-अंतर की गणना करें, यानी समूह और गतिविधि के बीच के माह।
  • COUNT(DISTINCT user_id) से लंबे प्रारूप में समुच्चयित करें; यदि आव्यूह आवश्यक हो तो CASE द्वारा धुरीकरण करें।
  • गिनतियों को सावधानी से दरों में बदलें और पूर्णांक विभाजन तथा शून्य से विभाजन से बचने के लिए 100.0 और NULLIF का उपयोग करें।
  • शून्य वाली कोशिकाएँ भरने के लिए निर्मित आव्यूह को LEFT JOIN करें और याद रखें कि आव्यूह त्रिकोणीय होता है।
शुरुआत निःशुल्क

एआई शिक्षक के साथ कोडिंग साक्षात्कार की तैयारी सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
90
पाठ
360

अक्सर पूछे जाने वाले प्रश्न

क्या “रिटेंशन मैट्रिक्स बनाना” पाठ निःशुल्क है?

हाँ—“रिटेंशन मैट्रिक्स बनाना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। कोडिंग साक्षात्कार की तैयारी पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“रिटेंशन मैट्रिक्स बनाना” में मैं क्या सीखूँगा?

रिटेंशन तालिका बनाने के लिए कोहोर्ट और अवधि-अंतर के अनुसार सक्रिय उपयोगकर्ताओं की गिनती करना आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ कोडिंग साक्षात्कार की तैयारी का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या कोडिंग साक्षात्कार की तैयारी शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर कोडिंग साक्षात्कार की तैयारी शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“रिटेंशन मैट्रिक्स बनाना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस कोडिंग साक्षात्कार की तैयारी पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर कोडिंग साक्षात्कार की तैयारी पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. पहली कार्रवाई से कोहोर्ट तय करना
  2. रिटेंशन मैट्रिक्स बनाना
  3. दिन-N और रोलिंग रिटेंशन
  4. छोड़ने और वापस लौटने की क्वेरी
← कोडिंग साक्षात्कार की तैयारी पर वापस जाएँ