الوحدة 5 · الإجابة عن أسئلة حقيقية
دراسة حالة: لماذا قفز الإيراد في الربع الرابع من 2025؟
26 دقراءة 4 دتمرين Python
الدرس في لمحة
أجب عن سؤال عمل حقيقي من البداية إلى النهاية - عرّف المقياس، وافحص البيانات، وفكّك الإيراد إلى طلبات وعملاء وقيمة طلب، واختبر كل تفسير، واكتب استنتاجًا مع تحفّظاته.
- 1الخطوة 1: عرّف المقياس وافحص البيانات
- 2الخطوة 2: فكّك التغيّر
- 3الخطوة 3: ضعه بجانب العام الماضي
- 4الخطوة 4: اختبر التفسيرات الشائعة
- 5الخطوة 5: اكتب الإجابة
لا فيديو هنا، بل الشيء الحقيقي: درس مكتوب وأمثلة قابلة للتشغيل واختبار وتدريب.
رسالة رئيس النمو تنتظر منذ الدرس 1.1: “كان إيراد الربع الرابع من 2025 أعلى بكثير من أي ربع قبله. هل السبب الجمعة السوداء، أم عملاء أكثر، أم سلال أكبر، أم خطأ في البيانات؟ أحتاج إجابة أستطيع تكرارها أمام مجلس الإدارة.” يعمل هذا الدرس على الإجابة كما كنت ستفعل في العمل: عرّف، وافحص، وفكّك، واختبر التفسيرات، واستنتج. كل خطوة تستخدم أداة تعرفها مسبقًا.
الخطوة 1: عرّف المقياس وافحص البيانات
المقياس هو تعريف الإيراد في الدورة من الدرس 4.2: إيراد البنود بعد الخصومات، دون الشحن ودون الطلبات الملغاة. ابنِ صفًا لكل طلب، وأكّد بـ assert الحقائق التي يعتمد عليها التحليل قبل أن تثق برقم واحد:
import pandas as pd
items = pd.read_csv("order_items.csv")
orders = pd.read_csv("orders.csv", parse_dates=["order_date"])
items["revenue"] = items["quantity"] * items["unit_price"] * (1 - items["discount"])
per_order = items.groupby("order_id", as_index=False)["revenue"].sum()
df = orders.merge(per_order, on="order_id", how="left", validate="one_to_one")
assert df["order_id"].is_unique
assert df["revenue"].notna().all(), "an order has no items"
df = df[df["status"] != "cancelled"].copy()
df["quarter"] = df["order_date"].dt.to_period("Q")
print(df.groupby("quarter")["revenue"].sum().round(0))
print(df.loc[df["quarter"] == "2025Q4", "status"].value_counts())انتقل الإيراد من 80,523 دولارًا في الربع الثالث من 2025 إلى 146,825 في الربع الرابع، بزيادة 82%. لا مكرّرات، ولا طلبات بلا بنود. ويظهر تحفّظ واحد فورًا: 63 طلبًا من الربع الرابع قيمتها 11,321 دولارًا، أي نحو 8% من الربع، ما زالت processing أو shipped. إنها تُحسب إيرادًا بحسب التعريف، لكن بعضها قد يُلغى. سجّل ذلك الآن؛ فمكانه في الإجابة النهائية.
الخطوة 2: فكّك التغيّر
الإيراد هو الطلبات مضروبة في متوسط قيمة الطلب (AOV)، والطلبات هي العملاء النشطون مضروبين في الطلبات لكل عميل. حساب كل عامل يُظهر أيّها تحرّك:
import pandas as pd
items = pd.read_csv("order_items.csv")
orders = pd.read_csv("orders.csv", parse_dates=["order_date"])
items["revenue"] = items["quantity"] * items["unit_price"] * (1 - items["discount"])
df = orders.merge(items.groupby("order_id", as_index=False)["revenue"].sum(), on="order_id", validate="one_to_one")
df = df[df["status"] != "cancelled"].copy()
df["quarter"] = df["order_date"].dt.to_period("Q")
q = df.groupby("quarter").agg(
revenue=("revenue", "sum"),
orders=("order_id", "count"),
customers=("customer_id", "nunique"),
)
q["aov"] = q["revenue"] / q["orders"]
q["orders_per_customer"] = q["orders"] / q["customers"]
print(q.round(2).tail(5))
print((q.loc["2025Q4"] / q.loc["2025Q3"] - 1).round(3))أمر الطباعة الثاني هو التفكيك في سطر واحد. ارتفعت الطلبات 98% بينما انخفض متوسط قيمة الطلب 8%: كان الربع الرابع مسألة حجم مبيعات لا سلال أكبر، وهذا يطابق الوسيطات التي رأيتها في الدرس 5.1. وجاءت الطلبات الإضافية من الاتجاهين: عملاء نشطون أكثر بنسبة 54%، وكل منهم طلب أكثر (2.28 طلب لكل عميل مقابل 1.77).
الخطوة 3: ضعه بجانب العام الماضي
القفزة لا تكون مفاجئة إلا مقارنةً بما يحدث عادةً. وقد أظهر الدرس 4.4 بالفعل المقارنة المهمة:
| النمو من الربع الثالث إلى الرابع | النمو السنوي في الربع الرابع | |
|---|---|---|
| 2024 | +73% | (لا بيانات لعام 2023) |
| 2025 | +82% | +180% |
كان الربع الرابع أعلى بنسبة 73% من الثالث في 2024 أيضًا، وكان نوفمبر أكبر شهر في السنتين. ارتفاع 2025 من الربع الثالث إلى الرابع أقوى بعض الشيء فقط من الدفعة الموسمية المعتادة، ونمو الربع الرابع بنسبة 180% على العام السابق يقع ضمن نطاق أرباع 2025 الأخرى (من 145% إلى 200%). وتبدأ رسالة مجلس الإدارة بالتشكّل: العمل نما إلى نحو ثلاثة أضعاف حجمه سنة مقابل سنة (إذ بلغ إيراد 2025 نحو 2.7 ضعف إيراد 2024)، والربع الرابع هو ذلك العمل الأكبر وهو يبلغ ذروة موسم الأعياد المعتادة.
الخطوة 4: اختبر التفسيرات الشائعة
كل تفسير يحصل على رقم محدّد:
import pandas as pd
items = pd.read_csv("order_items.csv")
orders = pd.read_csv("orders.csv", parse_dates=["order_date"])
items["revenue"] = items["quantity"] * items["unit_price"] * (1 - items["discount"])
df = orders.merge(items.groupby("order_id", as_index=False)["revenue"].sum(), on="order_id", validate="one_to_one")
df = df[df["status"] != "cancelled"].copy()
df["quarter"] = df["order_date"].dt.to_period("Q")
first_q = df.groupby("customer_id")["order_date"].min().dt.to_period("Q").rename("first_quarter")
df = df.merge(first_q, on="customer_id", validate="many_to_one")
df["customer_type"] = (df["quarter"] == df["first_quarter"]).map({True: "new", False: "returning"})
q4 = df[df["quarter"] == "2025Q4"]
total = q4["revenue"].sum()
print(q4.groupby("customer_type")["revenue"].sum().div(total).round(3))
bf = q4["coupon_code"] == "BLACKFRIDAY25"
print("Black Friday coupon orders:", bf.sum(), "| share of Q4 revenue:", round(q4.loc[bf, "revenue"].sum() / total, 3))
print(q4.groupby(q4["order_date"].dt.month)["revenue"].sum().round(0))الجمعة السوداء؟ استُخدم الكوبون BLACKFRIDAY25 في 69 طلبًا من الربع الرابع، جلبت 8.4% من إيراد الربع. كان نوفمبر ضخمًا، 75,334 دولارًا، لكن معظمه جاء من طلبات بلا ذلك الكوبون. ساعدت الجمعة السوداء، لكنها لا تفسّر القفزة. عملاء جدد؟ العملاء الذين قدّموا أول طلب لهم جلبوا 36% من إيراد الربع الرابع، بينما جاء 64% من عملاء عائدين، وهؤلاء أيضًا مصدر ثلثي الزيادة البالغة 66,302 دولار على الربع الثالث. القفزة تقوم في معظمها على قاعدة عملاء قائمة ظلّت تنمو وتعود. سلال أكبر؟ استُبعد هذا في الخطوة 2. زيادة الأسعار؟ دخلت الزيادة بنسبة 5% حيّز التنفيذ في مارس 2025، فهي ترفع الربعين الثالث والرابع بالتساوي ولا تفسّر شيئًا من التغيّر بينهما. خطأ في البيانات؟ لم تجد فحوص الخطوة 1 مكرّرات ولا طلبات يتيمة؛ والخطر الوحيد المفتوح هو الـ 8% التي لم تُسلَّم بعد.
الخطوة 5: اكتب الإجابة
لا يكتمل التحليل إلا حين يستطيع شخص آخر تكراره في اجتماع. ابدأ بالاستنتاج، وقدّم الأدلة بالأرقام، واختم بالتحفّظات:
كان إيراد الربع الرابع من 2025 (146,825 دولارًا، بزيادة 82% على الربع الثالث) في الأساس ذروة موسم الأعياد المعتادة لدى Cartwheel، لعمل بلغ حجمه 2.7 ضعف ما كان عليه قبل سنة. جاء الارتفاع من حجم الطلبات (زيادة 98%)، لا من حجم الطلب (انخفض متوسط قيمة الطلب 8%)، مع عملاء نشطين أكثر بنسبة 54% طلبوا بوتيرة أعلى. وكان الربع الرابع أعلى بنسبة 73% من الثالث في 2024 أيضًا. أنتج العملاء العائدون 64% من إيراد الربع الرابع؛ وأنتجت طلبات كوبون الجمعة السوداء 8.4%. التحفّظات: 8% من إيراد الربع الرابع من طلبات لم تُسلَّم بعد، وانخفاض قيمة الطلب جزء منه ثمن خصومات الربع الرابع، التي زادت على ثلاثة أضعاف مقارنةً بالربع الثالث (5,581 دولارًا مقابل 1,615).
في التمرين تعيد بناء التفكيك بالكود. والدرس الأخير يحوّل هذا التحليل إلى شيء تستطيع إعادة تشغيله في الربع القادم دون أن تبدأ من الصفر.
أهم النقاط
- ابدأ سؤال العمل بكتابة المقياس وتعريفه الدقيق، ثم افحص البيانات التي تغذّيه قبل أي تحليل.
- فكّك المجموع إلى محرّكاته (الإيراد = الطلبات × متوسط قيمة الطلب؛ والطلبات = العملاء × الطلبات لكل عميل) لترى أيّها تحرّك.
- قارن بالفترة نفسها من العام الماضي وبالنمط الموسمي، كي لا تظنّ ذروة طبيعية اختراقًا.
- اختبر كل تفسير شائع برقم محدّد، وقل كم من التغيّر يستطيع تفسيره وكم لا يستطيع.
- الإجابة المكتملة استنتاج قصير، والأدلة التي خلفه، والتحفّظات التي قد تغيّره.