Header Ads

Header ADS

Revenue Per Qualified Referral(RPQR )

 

RPQR — Revenue Per Qualified Referral 

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

🍔 FoodBD App এর কথা ধরো

তোমার manager তোমাকে জিজ্ঞেস করলো —

"আমাদের referral program কি আসলে কাজে আসছে? আমরা referral এ যে টাকা খরচ করছি সেটা কি worth it?"

তুমি বললে —

"Sir, এই মাসে ৩৫০ টা Qualified Referral হয়েছে!"

Manager বললো —

"৩৫০ টা হয়েছে ভালো কথা। কিন্তু এই ৩৫০ জন থেকে আমরা কত টাকা আয় করলাম? প্রতিটা Qualified Referral থেকে average কত টাকা আসছে?"

তুমি চুপ। 😶

এই প্রশ্নের উত্তরই হলো RPQR।


২. RPQR কী? (Definition)

RPQR = Revenue Per Qualified Referral

প্রতিটা Qualified Referral থেকে business গড়ে কত টাকা Revenue পাচ্ছে — সেটাই RPQR।

সহজ ভাষায়:

তুমি referral program চালালে
কিছু মানুষ Qualified Referral হলো
এই Qualified মানুষগুলো মিলে যত টাকার business করলো
সেটাকে মোট Qualified Referral দিয়ে ভাগ করলে
যা পাবে — সেটাই RPQR

৩. RPQR Formula

              Total Revenue from Qualified Referrals
RPQR  =  ─────────────────────────────────────────────
                  Total Qualified Referrals

সহজ Example:

এই মাসে:
Qualified Referral          = ১০০ জন
এই ১০০ জন মিলে Order করলো = ৳৫০,০০০

RPQR = ৳৫০,০০০ ÷ ১০০
RPQR = ৳৫০০

মানে — প্রতিটা Qualified Referral থেকে
        গড়ে ৳৫০০ Revenue আসছে।

৪. Step by Step বুঝি — কোন Revenue count হবে?

এখানে অনেকে confuse হয়। "Revenue from Qualified Referrals" মানে কী?

দুইটা পদ্ধতি আছে:


পদ্ধতি ১ — শুধু First Order এর Revenue

Qualified Referral হওয়ার সময় যে order দিয়েছে
শুধু সেই order এর revenue count করা।

Example:
করিম Qualified হলো, তার first order ছিলো ৳৩০০
শুধু এই ৳৩০০ count হবে।

কখন use করে: Referral reward calculate করার সময়।


পদ্ধতি ২ — Lifetime Revenue (LTV Based)

Qualified Referee টা পরবর্তী সব orders এ
যত টাকা spend করেছে সব count করা।

Example:
করিম Qualified হলো
জানুয়ারিতে    ৳৩০০
ফেব্রুয়ারিতে  ৳৫০০
মার্চে         ৳৪০০
─────────────────────
Total          ৳১২০০ ← এটাই করিম এর lifetime revenue

কখন use করে: Referral program এর overall value বোঝার সময়।

⚠️ Important:

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


৫. বড় Example দিয়ে পুরোটা বুঝি

FoodBD App — এই মাসের Data:

┌──────────┬─────────────┬───────────────────────────────┬──────────────┐
│  নাম     │  Qualified? │  Orders                       │  Total Spent │
├──────────┼─────────────┼───────────────────────────────┼──────────────┤
│ করিম    │     ✅      │ ৳৩০০ + ৳৫০০ + ৳৪০০           │   ৳১,২০০    │
│ সুমন    │     ✅      │ ৳৬০০ + ৳৩০০                   │     ৳৯০০    │
│ নাফিস   │     ✅      │ ৳৪০০ + ৳৪০০ + ৳৪০০ + ৳৪০০   │   ৳১,৬০০    │
│ মিম     │     ✅      │ ৳২৫০                           │     ৳২৫০    │
│ রাহেলা  │     ✅      │ ৳৮০০ + ৳৭০০                   │   ৳১,৫০০    │
└──────────┴─────────────┴───────────────────────────────┴──────────────┘

Total Qualified Referrals  = ৫ জন
Total Revenue              = ৳১২০০ + ৳৯০০ + ৳১৬০০ + ৳২৫০ + ৳১৫০০
                           = ৳৫,৪৫০

RPQR = ৳৫,৪৫০ ÷ ৫
RPQR = ৳১,০৯০

মানে — প্রতিটা Qualified Referral থেকে গড়ে ৳১,০৯০ Revenue আসছে।


৬. RPQR দিয়ে কী কী Decision নেওয়া যায়?

Decision ১ — Reward কত দেবো?

RPQR = ৳১,০৯০

মানে প্রতিটা Qualified Referral থেকে ৳১,০৯০ আসছে।

এখন যদি referrer কে ৳১০০ reward দাও → profit আছে ✅
যদি referrer কে ৳১,২০০ reward দাও   → loss হচ্ছে ❌

Decision ২ — Referral Program Worth It কিনা?

এই মাসে referral program এ খরচ হয়েছে:
Reward দিয়েছি          = ৳১০,০০০
Marketing cost         = ৳৫,০০০
Total Cost             = ৳১৫,০০০

Qualified Referral     = ১০০ জন
RPQR                   = ৳৫০০

Total Revenue          = ১০০ × ৳৫০০ = ৳৫০,০০০

Profit = ৳৫০,০০০ - ৳১৫,০০০ = ৳৩৫,০০০ ✅

Program worth it!

Decision ৩ — কোন Source এর RPQR বেশি?

WhatsApp referrals এর RPQR  = ৳৮০০
Facebook referrals এর RPQR  = ৳৪০০
Email referrals এর RPQR     = ৳৩০০

Decision → WhatsApp এ বেশি focus করো।
           WhatsApp referrals বেশি valuable।

৭. Database Structure

-- revenue tracking এর জন্য orders table লাগবে

CREATE TABLE orders (
    id              SERIAL PRIMARY KEY,
    user_id         INT NOT NULL,           -- কে order করেছে
    order_amount    DECIMAL(10,2) NOT NULL, -- কত টাকার order
    order_status    VARCHAR(20),            -- 'completed', 'cancelled'
    ordered_at      TIMESTAMP DEFAULT NOW()
);

-- referrals table এ revenue column add করা যায়
ALTER TABLE referrals
    ADD COLUMN total_revenue    DECIMAL(10,2) DEFAULT 0,
    ADD COLUMN total_orders     INT DEFAULT 0;

৮. SQL দিয়ে RPQR Calculate করা

Query 1 — Basic RPQR

SELECT
    COUNT(DISTINCT r.id)            AS qualified_referrals,
    SUM(o.order_amount)             AS total_revenue,
    ROUND(
        SUM(o.order_amount) /
        NULLIF(COUNT(DISTINCT r.id), 0)
    , 2)                            AS rpqr

FROM referrals r

-- Qualified Referral এর referee দের orders join করো
JOIN orders o
    ON  o.user_id       = r.referee_id
    AND o.order_status  = 'completed'

WHERE r.is_qualified    = TRUE
  AND r.referred_at    >= NOW() - INTERVAL '30 days';

Output:

qualified_referrals | total_revenue | rpqr
--------------------|---------------|-------
350                 | 192500.00     | 550.00

Query 2 — Source wise RPQR

-- কোন source থেকে আসা referral সবচেয়ে বেশি revenue আনছে?
SELECT
    r.referral_source,
    COUNT(DISTINCT r.id)        AS qualified_count,
    SUM(o.order_amount)         AS total_revenue,
    ROUND(
        SUM(o.order_amount) /
        NULLIF(COUNT(DISTINCT r.id), 0)
    , 2)                        AS rpqr

FROM referrals r
JOIN orders o
    ON  o.user_id       = r.referee_id
    AND o.order_status  = 'completed'

WHERE r.is_qualified    = TRUE
  AND r.referred_at    >= NOW() - INTERVAL '30 days'

GROUP BY r.referral_source
ORDER BY rpqr DESC;

Output:

referral_source | qualified_count | total_revenue | rpqr
----------------|-----------------|---------------|-------
whatsapp        | 150             | 120000.00     | 800.00
facebook        | 100             | 40000.00      | 400.00
email           | 60              | 18000.00      | 300.00
direct          | 40              | 10000.00      | 250.00

Query 3 — Monthly RPQR Trend

-- প্রতি মাসে RPQR কেমন ছিলো?
SELECT
    TO_CHAR(r.referred_at, 'YYYY-MM')  AS month,
    COUNT(DISTINCT r.id)               AS qualified_referrals,
    ROUND(SUM(o.order_amount), 2)      AS total_revenue,
    ROUND(
        SUM(o.order_amount) /
        NULLIF(COUNT(DISTINCT r.id), 0)
    , 2)                               AS rpqr

FROM referrals r
JOIN orders o
    ON  o.user_id      = r.referee_id
    AND o.order_status = 'completed'

WHERE r.is_qualified = TRUE
  AND r.referred_at >= NOW() - INTERVAL '6 months'

GROUP BY TO_CHAR(r.referred_at, 'YYYY-MM')
ORDER BY month;

Output:

month   | qualified_referrals | total_revenue | rpqr
--------|---------------------|---------------|-------
2024-08 | 200                 | 90000.00      | 450.00
2024-09 | 250                 | 120000.00     | 480.00
2024-10 | 300                 | 150000.00     | 500.00
2024-11 | 320                 | 172800.00     | 540.00
2024-12 | 340                 | 187000.00     | 550.00
2025-01 | 350                 | 192500.00     | 550.00

RPQR মাসে মাসে বাড়ছে — referral program healthy! ✅


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

import pandas as pd
import psycopg2

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

# Qualified Referrals এবং তাদের orders
query = """
    SELECT
        r.id                AS referral_id,
        r.referrer_id,
        r.referee_id,
        r.referral_source,
        r.referred_at,
        r.qualified_at,
        o.order_amount,
        o.ordered_at
    FROM referrals r
    JOIN orders o
        ON  o.user_id       = r.referee_id
        AND o.order_status  = 'completed'
    WHERE r.is_qualified    = TRUE
      AND r.referred_at    >= NOW() - INTERVAL '30 days'
"""

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

# =============================================
# BASIC RPQR
# =============================================
total_revenue           = df['order_amount'].sum()
qualified_referrals     = df['referral_id'].nunique()
rpqr                    = total_revenue / qualified_referrals

print("============================================")
print("           RPQR REPORT (Last 30 Days)      ")
print("============================================")
print(f"Qualified Referrals : {qualified_referrals}")
print(f"Total Revenue       : ৳{total_revenue:,.2f}")
print(f"RPQR                : ৳{rpqr:,.2f}")
print("============================================")

Output:

============================================
           RPQR REPORT (Last 30 Days)
============================================
Qualified Referrals : 350
Total Revenue       : ৳192,500.00
RPQR                : ৳550.00
============================================

# =============================================
# SOURCE WISE RPQR
# =============================================
source_rpqr = df.groupby('referral_source').agg(
    qualified_count = ('referral_id', 'nunique'),
    total_revenue   = ('order_amount', 'sum')
).reset_index()

source_rpqr['rpqr'] = (
    source_rpqr['total_revenue'] /
    source_rpqr['qualified_count']
).round(2)

source_rpqr = source_rpqr.sort_values('rpqr', ascending=False)

print("\n===== RPQR by Source =====")
print(source_rpqr.to_string(index=False))

# =============================================
# TOP REFERRERS BY RPQR
# =============================================
referrer_rpqr = df.groupby('referrer_id').agg(
    qualified_count = ('referral_id', 'nunique'),
    total_revenue   = ('order_amount', 'sum')
).reset_index()

referrer_rpqr['rpqr'] = (
    referrer_rpqr['total_revenue'] /
    referrer_rpqr['qualified_count']
).round(2)

top_referrers = (
    referrer_rpqr
    .sort_values('rpqr', ascending=False)
    .head(5)
)

print("\n===== Top 5 Referrers by RPQR =====")
print(top_referrers.to_string(index=False))

Output:

===== RPQR by Source =====
referral_source  qualified_count  total_revenue    rpqr
       whatsapp              150      120000.00   800.00
       facebook              100       40000.00   400.00
          email               60       18000.00   300.00
         direct               40       10000.00   250.00

===== Top 5 Referrers by RPQR =====
referrer_id  qualified_count  total_revenue    rpqr
       1023               18       25200.00  1400.00
       2045               12       15600.00  1300.00
       3012                7        8400.00  1200.00
       4089               15       16500.00  1100.00
       5023               10       10500.00  1050.00

১০. ETL — Daily RPQR Automatically Calculate

# etl_calculate_rpqr.py
# প্রতিদিন রাত ১টায় CRON এ run হবে

import psycopg2
from datetime import datetime

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

    # Daily RPQR calculate করে একটা summary table এ insert করো
    insert_query = """
        INSERT INTO rpqr_daily_summary (
            summary_date,
            qualified_referrals,
            total_revenue,
            rpqr
        )
        SELECT
            CURRENT_DATE                                AS summary_date,
            COUNT(DISTINCT r.id)                        AS qualified_referrals,
            COALESCE(SUM(o.order_amount), 0)            AS total_revenue,
            ROUND(
                COALESCE(SUM(o.order_amount), 0) /
                NULLIF(COUNT(DISTINCT r.id), 0)
            , 2)                                        AS rpqr
        FROM referrals r
        LEFT JOIN orders o
            ON  o.user_id       = r.referee_id
            AND o.order_status  = 'completed'
            AND o.ordered_at::DATE = CURRENT_DATE
        WHERE r.is_qualified    = TRUE
          AND r.qualified_at::DATE = CURRENT_DATE

        -- Already inserted হলে update করো
        ON CONFLICT (summary_date)
        DO UPDATE SET
            qualified_referrals = EXCLUDED.qualified_referrals,
            total_revenue       = EXCLUDED.total_revenue,
            rpqr                = EXCLUDED.rpqr,
            updated_at          = NOW()
    """

    cursor.execute(insert_query)
    conn.commit()

    print(f"[{datetime.now()}] Daily RPQR ETL Complete.")
    cursor.close()
    conn.close()

if __name__ == "__main__":
    calculate_daily_rpqr()

Crontab:

# প্রতিদিন রাত ১টায় run হবে
0 1 * * * /usr/bin/python3 /home/etl/etl_calculate_rpqr.py

১১. সব Metrics একসাথে — Big Picture

১০০০ Referral Sent
        │
        ▼
 ৪০০ Converted          ← Conversion Rate = 40%
        │
        ▼
 ৩৫০ Qualified          ← QRR = 35% (Sent Based)
        │                        87.5% (Converted Based)
        ▼
৳১৯২,৫০০ Revenue        ← RPQR = ৳৫৫০ per Qualified Referral

এই তিনটা metric একসাথে দেখলে পুরো picture পাওয়া যায়:

  • Conversion Rate → কতজন আসছে
  • QRR → কতজন কাজের
  • RPQR → কাজের মানুষগুলো কত টাকা আনছে

১২. Superset Dashboard SQL

-- RPQR KPI Card এর জন্য
SELECT
    ROUND(
        SUM(o.order_amount) /
        NULLIF(COUNT(DISTINCT r.id), 0)
    , 2) AS rpqr
FROM referrals r
JOIN orders o
    ON  o.user_id      = r.referee_id
    AND o.order_status = 'completed'
WHERE r.is_qualified   = TRUE
  AND r.referred_at   >= NOW() - INTERVAL '30 days';

সারসংক্ষেপ 🎯

বিষয় মূল কথা
RPQR কী প্রতিটা Qualified Referral থেকে গড়ে কত Revenue আসে
Formula Total Revenue ÷ Total Qualified Referrals
কেন দরকার Referral program এর আসল value বোঝার জন্য
Reward decision RPQR এর চেয়ে কম reward দিলে profit থাকে
Source analysis কোন source এর RPQR বেশি সেখানে বেশি invest করো
Production এ Daily ETL দিয়ে auto calculate, Superset এ দেখাও

Powered by Blogger.