Header Ads

Header ADS

Qualified Referrals & Qualified Referral Rate

 

Qualified Referrals & Qualified Referral Rate

১. আগে একটা Real Story দিয়ে শুরু করি

🏪 ধরো "FoodBD" App এর কথা

রহিম তার ৫ জন বন্ধুকে referral link পাঠালো।

বন্ধু ১ — করিম    → Sign up করলো, একটা order দিলো ✅
বন্ধু ২ — রফিক    → Sign up করলো, কিছুই করলো না ❌
বন্ধু ৩ — সুমন    → Sign up করলো, ৩টা order দিলো ✅
বন্ধু ৪ — জামাল   → Sign up করলো, ১ টাকার order দিলো 🤔
বন্ধু ৫ — তামিম   → Sign up করলো কিন্তু fake নাম দিলো ❌

এখন প্রশ্ন হলো —

এই ৫ টা referral কি সবগুলো business এর কাছে সমান valuable?

উত্তর হলো — না।

Business চায় এমন referee যে actually valuable customer হবে। সবাই sign up করলেই হবে না।

এই "actually valuable" referral গুলোকেই বলা হয় Qualified Referral।


২. Qualified Referral কী? (Definition)

Qualified Referral হলো এমন একটা referral যেখানে referee business এর নির্ধারিত সব criteria পূরণ করেছে — শুধু sign up না, বরং সত্যিকারের একজন valuable customer হিসেবে প্রমাণিত হয়েছে।

সহজ ভাষায়:

সব Referral         = যত মানুষ refer করা হয়েছে
        │
        ▼
সব Converted        = যারা sign up বা কিছু একটা করেছে
        │
        ▼
Qualified Referral  = যারা business এর সব rules মেনে
                      সত্যিকারের customer হয়েছে  ✅

৩. "Criteria" বা "Rules" মানে কী?

Business নিজেই decide করে কোন referee কে Qualified বলা হবে। এই rules কে বলা হয় Qualification Criteria।

বিভিন্ন Business এর Criteria:


🍔 Food Delivery App (FoodBD)

Qualified হতে হলে referee কে:
  ✅ Sign up করতে হবে
  ✅ ৭ দিনের মধ্যে প্রথম order দিতে হবে
  ✅ Minimum ৳২০০ এর order হতে হবে
  ✅ Real phone number verify করতে হবে

৪. Qualified vs Non-Qualified — পার্থক্য

FoodBD App এর উদাহরণে ফিরে যাই:

বন্ধু ১ — করিম  → Sign up ✅, Order দিলো ✅, ৳৩০০ ✅, Verified ✅
                                            → QUALIFIED ✅

বন্ধু ২ — রফিক  → Sign up ✅, Order দিলো ❌
                                            → NOT QUALIFIED ❌
                                            (order দেয়নি)

বন্ধু ৩ — সুমন  → Sign up ✅, Order দিলো ✅, ৳৫০০ ✅, Verified ✅
                                            → QUALIFIED ✅

বন্ধু ৪ — জামাল → Sign up ✅, Order দিলো ✅, মাত্র ৳৫০ ❌
                                            → NOT QUALIFIED ❌
                                            (minimum amount পূরণ হয়নি)

বন্ধু ৫ — তামিম → Sign up ✅, Fake info ❌
                                            → NOT QUALIFIED ❌
                                            (verification fail)

Summary:

Total Referrals     = ৫
Converted           = ৪ (sign up করেছে)
Qualified Referrals = ২ (করিম + সুমন)

৫. Qualified Referral Rate (QRR) কী?

Qualified Referral Rate হলো — মোট referral এর মধ্যে কতটা Qualified Referral হয়েছে তার percentage।

Formula:

                    Qualified Referrals
QRR = ─────────────────────────────────────── × ১০০
                    Total Referrals

FoodBD Example দিয়ে Calculate:

Qualified Referrals = ২  (করিম + সুমন)
Total Referrals     = ৫

QRR = (২ / ৫) × ১০০
QRR = 40%

মানে — রহিম ৫ জনকে পাঠিয়েছিলো, তার মধ্যে ৪০% Qualified হয়েছে।


৬. QRR কোন Base এ Calculate করবে?

এখানে একটু সতর্ক থাকতে হবে। QRR calculate করার সময় denominator (নিচের সংখ্যা) কী হবে সেটা company decide করে।

তিনটা Common পদ্ধতি:


পদ্ধতি ১ — Total Referrals Sent এর উপর

QRR = Qualified / Total Sent × ১০০

Example:
Qualified = ২০০
Total Sent = ১০০০

QRR = (২০০/১০০০) × ১০০ = 20%

এটা সবচেয়ে strict calculation।


পদ্ধতি ২ — Total Converted এর উপর

QRR = Qualified / Total Converted × ১০০

Example:
Qualified = ২০০
Total Converted (signed up) = ৪০০

QRR = (২০০/৪০০) × ১০০ = 50%

এটা দেখায় — যারা এসেছে তাদের মধ্যে কতজন কাজের।


পদ্ধতি ৩ — Total Clicked এর উপর

QRR = Qualified / Total Clicked × ১০০

Example:
Qualified = ২০০
Total Clicked = ৬০০

QRR = (২০০/৬০০) × ১০০ = 33.3%

⚠️ Important:

তোমার company কোন পদ্ধতি use করে সেটা mentor কে জিজ্ঞেস করো। সব কোম্পানি একই পদ্ধতি use করে না। Documentation এ সবসময় লিখে রাখো কোন base এ calculate হচ্ছে।


৭. Database — Qualified Referral কীভাবে Store হয়?

-- referrals table এ qualified এর জন্য extra columns থাকে

CREATE TABLE referrals (
    id                  SERIAL PRIMARY KEY,
    referrer_id         INT NOT NULL,
    referee_id          INT NOT NULL,
    referral_code       VARCHAR(50),
    referral_source     VARCHAR(50),

    -- Basic tracking
    status              VARCHAR(20) DEFAULT 'pending',
    referred_at         TIMESTAMP DEFAULT NOW(),
    converted_at        TIMESTAMP,

    -- Qualification tracking
    is_qualified        BOOLEAN DEFAULT FALSE,    -- Qualified হয়েছে কিনা
    qualified_at        TIMESTAMP,                -- কখন Qualified হয়েছে
    qualification_reason VARCHAR(100),            -- কেন Qualified/Disqualified

    -- Criteria tracking
    is_verified         BOOLEAN DEFAULT FALSE,    -- Phone/NID verify হয়েছে কিনা
    first_order_amount  DECIMAL(10,2),            -- প্রথম order এর amount
    first_order_at      TIMESTAMP,                -- প্রথম order এর সময়
    days_to_qualify     INT,                      -- কতদিনে qualified হলো

    -- Reward
    reward_given        BOOLEAN DEFAULT FALSE
);

৮. SQL দিয়ে Qualified Referral বের করা

Query 1 — Basic Qualified Count

SELECT
    COUNT(*)                                         AS total_referrals,
    SUM(CASE WHEN is_qualified = TRUE THEN 1 END)    AS qualified_referrals,
    SUM(CASE WHEN is_qualified = FALSE THEN 1 END)   AS not_qualified,

    -- QRR calculation (Total Sent based)
    ROUND(
        SUM(CASE WHEN is_qualified = TRUE THEN 1 ELSE 0 END)
        * 100.0 / COUNT(*), 2
    )                                                AS qrr_percentage

FROM referrals
WHERE referred_at >= NOW() - INTERVAL '30 days';

Output:

total_referrals | qualified_referrals | not_qualified | qrr_percentage
----------------|---------------------|---------------|---------------
1000            | 350                 | 650           | 35.00

Query 2 — কেন Qualified হয়নি (Disqualification Reason)

SELECT
    qualification_reason,
    COUNT(*)       AS count,
    ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER (), 2) AS percentage
FROM referrals
WHERE is_qualified = FALSE
  AND referred_at >= NOW() - INTERVAL '30 days'
GROUP BY qualification_reason
ORDER BY count DESC;

Output:

qualification_reason          | count | percentage
------------------------------|-------|----------
no_first_order                | 300   | 46.15%
order_below_minimum_amount    | 150   | 23.08%
verification_failed           | 120   | 18.46%
order_after_deadline          |  80   | 12.31%

এই data দেখে business বুঝতে পারবে কোথায় সমস্যা আছে। যেমন — ৪৬% referee order-ই দিচ্ছে না। Solution — first order এ extra discount দাও।


Query 3 — Referrer অনুযায়ী QRR

-- কোন referrer এর QRR সবচেয়ে বেশি?
SELECT
    r.referrer_id,
    COUNT(*)                                                    AS total_referred,
    SUM(CASE WHEN r.is_qualified = TRUE THEN 1 ELSE 0 END)     AS qualified_count,
    ROUND(
        SUM(CASE WHEN r.is_qualified = TRUE THEN 1 ELSE 0 END)
        * 100.0 / COUNT(*), 2
    )                                                           AS referrer_qrr

FROM referrals r
WHERE r.referred_at >= NOW() - INTERVAL '30 days'
GROUP BY r.referrer_id
HAVING COUNT(*) >= 5          -- কমপক্ষে ৫টা referral আছে এমন
ORDER BY referrer_qrr DESC
LIMIT 10;

Output:

referrer_id | total_referred | qualified_count | referrer_qrr
------------|----------------|-----------------|-------------
1023        | 20             | 18              | 90.00%
2045        | 15             | 12              | 80.00%
3012        | 10             | 7               | 70.00%

User 1023 সবচেয়ে বেশি qualified referee পাঠাচ্ছে। এই user কে "Super Referrer" বলা হয়। Business এদেরকে extra reward দিতে পারে।


৯. Python দিয়ে Qualified Referral Analyze করা

import pandas as pd
import psycopg2

conn = psycopg2.connect(
    host="your-host",
    database="your_db",
    user="your_user",
    password="your_password"
)

query = """
    SELECT
        id,
        referrer_id,
        referee_id,
        referral_source,
        referred_at,
        converted_at,
        is_qualified,
        qualified_at,
        qualification_reason,
        first_order_amount,
        is_verified
    FROM referrals
    WHERE referred_at >= NOW() - INTERVAL '30 days'
"""

df = pd.read_sql(query, conn)
conn.close()

# =============================================
# BASIC METRICS
# =============================================
total_referrals     = len(df)
total_converted     = df['converted_at'].notna().sum()
total_qualified     = df['is_qualified'].sum()

# QRR — Total Sent Based
qrr_sent_based      = (total_qualified / total_referrals) * 100

# QRR — Converted Based
qrr_converted_based = (total_qualified / total_converted) * 100

print("============================================")
print("       QUALIFIED REFERRAL REPORT           ")
print("============================================")
print(f"Total Referrals Sent    : {total_referrals}")
print(f"Total Converted         : {total_converted}")
print(f"Total Qualified         : {total_qualified}")
print(f"Not Qualified           : {total_referrals - total_qualified}")
print(f"--------------------------------------------")
print(f"QRR (Sent Based)        : {qrr_sent_based:.2f}%")
print(f"QRR (Converted Based)   : {qrr_converted_based:.2f}%")
print("============================================")

Output:

============================================
       QUALIFIED REFERRAL REPORT
============================================
Total Referrals Sent    : 1000
Total Converted         : 500
Total Qualified         : 350
Not Qualified           : 650
--------------------------------------------
QRR (Sent Based)        : 35.00%
QRR (Converted Based)   : 70.00%
============================================

# =============================================
# SOURCE WISE QRR ANALYSIS
# =============================================
source_analysis = df.groupby('referral_source').agg(
    total        = ('id', 'count'),
    qualified    = ('is_qualified', 'sum')
).reset_index()

source_analysis['qrr'] = (
    source_analysis['qualified'] / source_analysis['total'] * 100
).round(2)

source_analysis = source_analysis.sort_values('qrr', ascending=False)

print("\n===== QRR by Source =====")
print(source_analysis.to_string(index=False))

Output:

===== QRR by Source =====
referral_source  total  qualified   qrr
       whatsapp    500        200  40.0%
       facebook    300        105  35.0%
          email    150         37  24.7%
         direct     50          8  16.0%

WhatsApp থেকে আসা referrals এর QRR সবচেয়ে বেশি।


# =============================================
# DISQUALIFICATION REASON ANALYSIS
# =============================================
not_qualified_df = df[df['is_qualified'] == False]

disqual_reasons = (
    not_qualified_df['qualification_reason']
    .value_counts()
    .reset_index()
)
disqual_reasons.columns = ['reason', 'count']
disqual_reasons['percentage'] = (
    disqual_reasons['count'] / len(not_qualified_df) * 100
).round(2)

print("\n===== Why Referrals Are NOT Qualifying =====")
print(disqual_reasons.to_string(index=False))

Output:

===== Why Referrals Are NOT Qualifying =====
                      reason  count  percentage
               no_first_order   300       46.15%
  order_below_minimum_amount    150       23.08%
           verification_failed  120       18.46%
        order_after_deadline     80       12.31%

১০. ETL Pipeline — Daily QRR Calculate করা

Production এ প্রতিদিন automatically QRR calculate হবে।

# etl_qualify_referrals.py
# প্রতিদিন সকালে CRON এ run হবে

import psycopg2
from datetime import datetime

# Qualification Criteria (FoodBD App)
MIN_ORDER_AMOUNT    = 200      # ৳২০০ minimum
DAYS_TO_QUALIFY     = 7        # ৭ দিনের মধ্যে order করতে হবে

def qualify_referrals():
    conn = psycopg2.connect(
        host="your-host",
        database="your_db",
        user="your_user",
        password="your_password"
    )
    cursor = conn.cursor()

    # STEP 1 — নতুন qualified referrals mark করো
    qualify_query = """
        UPDATE referrals r
        SET
            is_qualified         = TRUE,
            qualified_at         = NOW(),
            qualification_reason = 'all_criteria_met'
        WHERE
            r.is_qualified = FALSE
            AND r.is_verified = TRUE
            AND r.first_order_amount >= %(min_amount)s
            AND r.first_order_at IS NOT NULL
            AND r.first_order_at <= r.referred_at
                                    + INTERVAL '7 days'
    """

    cursor.execute(qualify_query, {'min_amount': MIN_ORDER_AMOUNT})
    qualified_count = cursor.rowcount
    print(f"Newly Qualified: {qualified_count}")

    # STEP 2 — Failed referrals mark করো (deadline পার হয়ে গেছে)
    disqualify_query = """
        UPDATE referrals
        SET
            is_qualified         = FALSE,
            qualification_reason = 'order_after_deadline'
        WHERE
            is_qualified = FALSE
            AND status = 'pending'
            AND referred_at < NOW() - INTERVAL '7 days'
            AND first_order_at IS NULL
    """

    cursor.execute(disqualify_query)
    disqualified_count = cursor.rowcount
    print(f"Disqualified (expired): {disqualified_count}")

    conn.commit()
    cursor.close()
    conn.close()

    print(f"[{datetime.now()}] ETL Complete.")

if __name__ == "__main__":
    qualify_referrals()

Crontab:

# প্রতিদিন সকাল ৬টায় run হবে
0 6 * * * /usr/bin/python3 /home/etl/etl_qualify_referrals.py

১১. Superset Dashboard এর জন্য SQL

-- Daily QRR Trend — Superset Line Chart
SELECT
    DATE(referred_at)           AS date,
    COUNT(*)                    AS total_referrals,
    SUM(CASE WHEN is_qualified = TRUE
             THEN 1 ELSE 0 END) AS qualified_count,
    ROUND(
        SUM(CASE WHEN is_qualified = TRUE
                 THEN 1 ELSE 0 END)
        * 100.0 / NULLIF(COUNT(*), 0), 2
    )                           AS qrr_percentage
FROM referrals
WHERE referred_at >= NOW() - INTERVAL '30 days'
GROUP BY DATE(referred_at)
ORDER BY date;

এই query দিয়ে Superset এ Line Chart বানাও। X-axis = date, Y-axis = qrr_percentage। দেখতে পাবে কোন দিনে QRR বেশি বা কম।


১২. QRR ভালো না খারাপ — কীভাবে বুঝবো?

QRR কত হলে ভালো সেটা industry এবং business এর উপর নির্ভর করে।
কিন্তু সাধারণ একটা idea:

QRR < 20%    → ⚠️  খারাপ — criteria খুব কঠিন বা referral quality কম
QRR 20-40%   → ✅  ঠিকঠাক — industry average
QRR 40-60%   → 🌟  ভালো — referral program healthy
QRR > 60%    → 🚀  অনেক ভালো — অথবা criteria খুব সহজ কিনা দেখো

১৩. Common Mistakes ⚠️

Mistake সমস্যা সমাধান
Criteria document না করা সবাই আলাদা বোঝে Confluence/Notion এ clearly লিখে রাখো
Criteria মাঝে মাঝে change করা Historical data inconsistent হয় Change করলে version track করো
QRR এর base না বলা ৩৫% মানে কোন base এ? সবসময় বলো "Sent Based QRR = ৩৫%"
Fraud referral check না করা একজন multiple account বানিয়ে inflate করে Device ID, IP address check করো
NULL handle না করা SQL এ divide by zero error NULLIF() use করো

সারসংক্ষেপ 🎯

বিষয় মূল কথা
Qualified Referral        Business এর সব criteria পূরণ করা referee
Criteria Company নিজে define করে — verify, order amount, deadline
QRR Formula (Qualified ÷ Total) × ১০০
QRR এর Base Sent / Converted / Clicked — company decide করে
Production এ ETL দিয়ে daily auto-qualify, CRON এ run করো
Dashboard এ Daily trend, source wise, referrer wise দেখাও
সতর্কতা Fraud check, NULL handle, criteria document করো





Converted vs Qualified Referral — পার্থক্য 


এক লাইনে পার্থক্য

Converted  = referee কিছু একটা করেছে
Qualified  = referee সঠিকভাবে সব rules মেনে করেছে

Real Life দিয়ে বোঝো

🏫 School Exam এর Example

ধরো পরীক্ষায় pass করতে হলে ৩টা condition:

✅ ১. পরীক্ষা দিতে হবে
✅ ২. কমপক্ষে ৩৩ নম্বর পেতে হবে
✅ ৩. সব subject এ দিতে হবে

এখন ৫ জন student:

করিম  → পরীক্ষা দিলো, ৭০ পেলো, সব subject দিলো  → PASS ✅
রফিক  → পরীক্ষা দিলো, ২০ পেলো                   → FAIL ❌
সুমন  → পরীক্ষা দিলো, ৫০ পেলো, ১ subject বাদ     → FAIL ❌
জামাল → পরীক্ষা দিলো, ৩৩ পেলো, সব subject দিলো  → PASS ✅
তামিম → পরীক্ষা দিলো কিন্তু খাতা জমা দেয়নি      → FAIL ❌

এখানে:

  • ৫ জনই পরীক্ষা দিয়েছে = ৫ জনই "Converted" (কিছু একটা করেছে)
  • করিম + জামাল = "Qualified" (সব rules মেনেছে)

এখন Referral এ Apply করো

🍔 FoodBD App এর Qualification Rules:

✅ ১. Sign up করতে হবে
✅ ২. ৭ দিনের মধ্যে order করতে হবে
✅ ৩. Minimum ৳২০০ এর order হতে হবে
✅ ৪. Phone number verify করতে হবে

৫ জন Referee:

┌─────────┬──────────┬──────────┬──────────┬──────────┬────────────┬───────────┐
│  নাম    │ Sign Up  │  Order   │  Amount  │ Verified │ Converted? │ Qualified?│
├─────────┼──────────┼──────────┼──────────┼──────────┼────────────┼───────────┤
│ করিম   │    ✅    │    ✅    │  ৳৩০০   │    ✅    │    ✅ YES  │  ✅ YES   │
│ রফিক   │    ✅    │    ❌    │    -     │    ✅    │    ✅ YES  │  ❌ NO    │
│ সুমন   │    ✅    │    ✅    │  ৳৫০০   │    ✅    │    ✅ YES  │  ✅ YES   │
│ জামাল  │    ✅    │    ✅    │   ৳৫০   │    ✅    │    ✅ YES  │  ❌ NO    │
│ তামিম  │    ✅    │    ❌    │    -     │    ❌    │    ✅ YES  │  ❌ NO    │
└─────────┴──────────┴──────────┴──────────┴──────────┴────────────┴───────────┘

Result:

Total Referrals     = ৫
Converted           = ৫   (সবাই sign up করেছে — কিছু একটা করেছে)
Qualified           = ২   (করিম + সুমন — সব rules মেনেছে)

কেন রফিক Converted কিন্তু Qualified না?

রফিক sign up করেছে       → তাই Converted = YES ✅
রফিক order দেয়নি         → তাই Qualified = NO  ❌

কেন জামাল Converted কিন্তু Qualified না?

জামাল sign up করেছে      → তাই Converted = YES ✅
জামালের order ৳৫০        → Minimum ৳২০০ হয়নি
                          → তাই Qualified = NO  ❌

সবচেয়ে সহজ মনে রাখার উপায় 🧠

CONVERTED  = Gate এ ঢুকেছে
QUALIFIED  = Gate এ ঢুকে সব কাজ সঠিকভাবে শেষ করেছে
Mall এর উদাহরণ:

Converted  = Mall এ প্রবেশ করেছে
Qualified  = Mall এ ঢুকে কিছু কিনেছে, receipt আছে,
             valid payment করেছে

Relationship টা কী?

সব Qualified Referral ই Converted ✅
কিন্তু
সব Converted Referral Qualified না ❌

Venn Diagram:

┌─────────────────────────────────┐
│                                 │
│      CONVERTED (বড় দল)         │
│                                 │
│    ┌───────────────────┐        │
│    │                   │        │
│    │    QUALIFIED      │        │
│    │    (ছোট দল)       │        │
│    │                   │        │
│    └───────────────────┘        │
│                                 │
└─────────────────────────────────┘

Qualified সবসময় Converted এর ভেতরে থাকে।

Number এ পার্থক্য দেখো

১০০০ Referral পাঠানো হলো
        │
        ▼
 ৪০০ Sign Up করলো       ← এরা সবাই CONVERTED
        │
        ├── ২০০ জন order দিলো কিন্তু amount কম
        ├──  ৫০ জন verify করলো না
        └── ১৫০ জন সব criteria পূরণ করলো  ← এরাই QUALIFIED
Converted = ৪০০
Qualified = ১৫০

Qualified সবসময় Converted এর চেয়ে কম বা সমান।
কখনো বেশি হতে পারে না।

এক কথায় মনে রাখো 💡

Converted  = "এসেছে"
Qualified  = "এসে কাজের মানুষ হয়েছে"




Powered by Blogger.