σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft Academyالمسارات
Ctrl K
AO
+1.2k متعلّم
تسجيل الدخولانضم ↗
المسارات
AO
+1.2k متعلّم
تسجيل الدخول
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
مسار Python›الوحدة 2 · NumPy وpandas لبيانات السوق›الموضوع 2.20·~35 دمتوسط

المدرجات التكرارية والتوزيعات

الموضع في المسارالوحدة 2 من 11 · الموضوع 20 من 20
2.20 المدرجات التكرارية والتوزيعات
—درجة المختبر— / 100إجمالي XP—التتابع—

العدّ حسب النطاق

المتوسط والانحراف المعياري يضغطان ألف عائد في رقمين. أما المدرّج التكراري فيحتفظ بالشكل: يقسم نطاق القيم إلى فئات ويعدّ كم ملاحظة تقع في كل منها. أعمدة عالية في الوسط وقصيرة عند الطرفين هي الجرس المألوف؛ والشكل غير المتوازن أو ثقيل الأطراف تحذير. يعيد np.histogram(values, bins=edges) الأعداد ويعمل على مصفوفة كاملة. تأخذ الفئة i القيم من edges[i] (مشمولة) حتى edges[i + 1] (غير مشمولة)، والفئة الأخيرة وحدها تشمل حدها الأيمن.

import numpy as np

returns = np.array([-0.021, -0.012, -0.008, -0.004, -0.002, 0.000, 0.001, 0.003, 0.004, 0.006, 0.009, 0.015, 0.032])
edges = np.array([-0.03, -0.01, 0.0, 0.01, 0.03])      # four bins: -3%..-1%, -1%..0%, 0%..1%, 1%..3%

counts, _ = np.histogram(returns, bins=edges)
print(counts.tolist(), counts.sum(), len(returns))      # [2, 3, 6, 1] 12 13   the 3.2% return is outside every bin

# bins=4 asks numpy for 4 equal-width bins between the minimum and the maximum
counts, edges4 = np.histogram(returns, bins=4)
print(counts.tolist(), edges4.round(4).tolist())        # [3, 6, 3, 1] [-0.021, -0.0078, 0.0055, 0.0188, 0.032]

التكرار أو الكثافة

تعتمد الأعداد على عدد الملاحظات وعلى عرض الفئات، فلا يمكن مقارنة مدرّجين بحجمي عينة مختلفين. وتحل الكثافة ذلك: اقسم كل عدد على المجموع المعدود وعلى عرض الفئة، فتساوي مساحة الأعمدة 1. عندئذٍ يمكن مقارنة الكثافة بمنحنى نظري كجرس التوزيع الطبيعي أو بعينة أخرى. يفعل ذلك np.histogram(values, bins=edges, density=True) وكذلك counts / (counts.sum() * np.diff(edges)).

counts, _ = np.histogram(returns, bins=edges)
density = counts / (counts.sum() * np.diff(edges))
print(density.round(2).tolist())              # [8.33, 25.0, 50.0, 4.17]
print((density * np.diff(edges)).sum())        # 1.0   the areas add up to 1

رسمه وقراءة الأطراف

يعدّ ax.hist(values, bins=10) ويرسم باستدعاء واحد: عمود لكل فئة (ax.patches) وارتفاعاته هي الأعداد. سمِّ المحاور دائمًا فمدرّج العوائد بلا «العائد اليومي» تحته بلا معنى. الشكل هو المهم، والأطراف هي ما يؤلم: عدّ نسبة الملاحظات التي تبعد أكثر من k انحرافًا معياريًا عن المتوسط، np.mean(np.abs(x - mean) > k * std)، يبيّن كم مرة تقع القيم المتطرفة. وفي التوزيع الطبيعي تقع نحو 4.6% من القيم وراء انحرافين و0.27% وراء ثلاثة. والأسواق أسوأ من ذلك كما ستبيّن المواضيع التالية.

import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.hist(returns, bins=5)
ax.set_xlabel("Daily return")
ax.set_ylabel("Frequency")
print(len(ax.patches), [round(p.get_height()) for p in ax.patches])   # 5 [2, 4, 5, 1, 1]   one bar per bin; the heights are the counts

# How often are the returns more than 1 standard deviation from the mean?
mean, std = returns.mean(), returns.std(ddof=1)
print(round(float(np.mean(np.abs(returns - mean) > 1 * std)), 3))     # 0.308   about 4 of 13 days
# The number of bins changes the picture: compare a few
for bins in (2, 4, 8):
    print(bins, np.histogram(returns, bins=bins)[0].tolist())
# 2 [9, 4]
# 4 [3, 6, 3, 1]
# 8 [1, 2, 2, 4, 2, 1, 0, 1]
الفئات تغيّر الصورةقلة الفئات تخفي الشكل وكثرتها تصنع ضجيجًا. ليس هناك عدد صحيح واحد؛ جرّب عدة أعداد وقارن المدرّجات بـالحدود نفسها. وتذكّر أن المدرّج عينة: ستبدو العينة التالية مختلفة قليلًا، فاحكم على الشكل العام لا على أعمدة منفردة.
  • np.histogram(values, bins=edges) تعدّ القيم في كل فئة؛ والفئة الأخيرة تشمل حدها الأيمن.
  • تقسم الكثافة على المجموع المعدود وعرض الفئة، فتساوي المساحات 1 وتصبح العينات قابلة للمقارنة.
  • يرسمه ax.hist(values, bins=n)؛ ويقيس np.mean(np.abs(x - mean) > k * std) الأطراف. سمِّ المحاور وقارن بالحدود نفسها.

التالي: متوسط العوائد وتباينها، الرقمان اللذان يلخصان التوزيع، محسوبين من تعريفيهما.

المختبر: ما الذي يُقيَّم

  • عُدّ العوائد في كل فئة باستخدام bin_counts25 نقطة
  • حوّل العدّ إلى كثافة باستخدام density25 نقطة
  • قِس الأطراف باستخدام fraction_beyond25 نقطة
  • ارسم المدرّج التكراري باستخدام plot_histogram25 نقطة
المستكشف · lab-53-1
▾ lab-53-1
…
bash · داخل المتصفح
learner@quantcraft:~/lab-53-1$
لم يتم تحميل Python بعدPythonLn 1, Col 1Spaces: 4UTF-8

هل تريد إعادة ضبط هذا الموضوع؟

سيعود كل ما في lab-53-1 إلى الملفات الابتدائية وستُمسح الطرفية. ستفقد حلّك الحالي ولا يمكن التراجع عن ذلك.

سيُعاد ضبطه
  • main.py ← الشيفرة الابتدائية
  • سجل الطرفية ومخرجات الاختبارات
  • التغييرات غير المُرسلة
سيُحتفظ به
  • أفضل درجة في المختبر
  • نقاط XP والتتابع
  • تقدّم المحاضرة والملاحظات

سجّل الدخول لتشغيل الكود الخاص بك.

قراءة كل المحاضرات مجانية. أنشئ حسابًا أو سجّل الدخول لتشغيل الكود وتنفيذ الاختبارات وتسليم هذا المختبر.

  • بيئة تطوير داخل المتصفح مع طرفية bash — لا حاجة لتثبيت أي شيء
  • تصحيح فوري ونقاط خبرة ومكانك في المسار
إنشاء حسابتسجيل الدخول
أو
المتابعة عبر GitHub