ایزی ریت
ورود / ثبت‌نامورود

حذف داده پرت در قیمت ارز؛ میانه، میانگین وزنی و قیمت‌گذاری لحظه‌ای با مثال

حذف داده پرت در قیمت ارز با مثال: چرا میانگین ساده فریب می‌خورد، میانه و میانگین وزنی، باند درصدی و MAD، کنترل جهش ناگهانی و برچسب کم‌منبع در EZRate.

عرفان فضلی
· کارشناس توسعه و برنامه نویسی
انتشار ۳۰ مهر ۱۴۰۵، ۱۲:۰۰ · ۴ دقیقه مطالعه
حذف داده پرت در قیمت ارز
خلاصه در سه خط
  • میانگین ساده با یک عدد اشتباه بزرگ جابه‌جا می‌شود؛ میانه تا وقتی بیشتر منابع درست باشند، پایدار می‌ماند.
  • نرخ‌هایی که بیش از حد مجاز (مثلاً ±۱٪) از میانه فاصله دارند، داده پرت‌اند و کنار گذاشته می‌شوند.
  • کنترل جهش، نرخ جدیدی را که ناگهان فاصلهٔ زیادی دارد تا تأیید شدن منتشر نمی‌کند؛ کم‌منبع بودن هم صریح اعلام می‌شود.

هر سامانه‌ای که از چند منبع قیمت جمع می‌کند، با یک سؤال ریاضی ساده اما مهم روبه‌روست: از ده‌ها عدد که بعضی‌شان اشتباه یا ساختگی‌اند، چطور یک عدد قابل اتکا بسازیم؟ در این مقاله حذف داده پرت در قیمت ارز را با مثال عددی توضیح می‌دهیم؛ همان منطقی که پشت نرخ‌های EZRate است.

★
پاسخ کوتاه
ابتدا میانهٔ همهٔ قیمت‌های هم‌زمان را پیدا کنید. قیمت‌هایی که بیش از یک آستانه (مثلاً ±۱٪) از میانه فاصله دارند را کنار بگذارید. از بقیه میانهٔ وزنی بگیرید. اگر منبع کافی نماند، نرخ قبلی را با برچسب کم‌منبع نگه دارید. جهش‌های ناگهانی را تا تأیید منتشر نکنید.

این مقاله بخشی از مجموعهٔ کشف قیمت دلار در بازار آزاد است.

مثال: ده قیمت در یک دقیقه

فرض کنید در یک دقیقه این ده قیمت فروش دلار (تومان، فرضی) از منابع مختلف رسیده است:

منبعقیمتتوضیح
۱۱۰۰٬۱۰۰
۲۱۰۰٬۲۰۰
۳۱۰۰٬۱۵۰
۴۱۰۰٬۲۵۰
۵۱۰۰٬۰۵۰
۶۱۰۰٬۳۰۰
۷۱۰۰٬۲۰۰
۸۱۰٬۰۱۵به‌جای تومان، عدد دیگری تایپ شده (یک صفر کم)
۹۱۰۴٬۰۰۰نرخ ساختگی برای جهت دادن به بازار
۱۰۱۰۰٬۱۰۰

میانگین ساده

جمع ده عدد تقسیم بر ده حدود ۹۱٬۵۳۷ تومان می‌شود. این عدد از همهٔ قیمت‌های واقعی بازار بیش از ۸ درصد پایین‌تر است. فقط یک اشتباه تایپی کافی بود تا میانگین کاملاً بی‌معنی شود.

میانه

اگر ده عدد را مرتب کنیم، دو عدد وسط ۱۰۰٬۱۵۰ و ۱۰۰٬۲۰۰ هستند و میانه ۱۰۰٬۱۷۵ تومان است؛ دقیقاً وسط قیمت‌های واقعی. دو عدد اشتباه، یکی خیلی کوچک و یکی خیلی بزرگ، روی میانه اثری نداشتند. این ویژگی «مقاومت» میانه است: تا وقتی کمتر از نیمی از داده‌ها خراب باشند، میانه درست می‌ماند.

حذف داده‌های پرت

با داشتن میانه، می‌توانیم عددهای پرت را تشخیص دهیم و کنار بگذاریم. ساده‌ترین روش، باند درصدی است: هر عددی که بیش از مثلاً یک درصد از میانه فاصله دارد، پرت است.

پرت است اگر: |قیمت − میانه| ÷ میانه > آستانه (مثلاً ۰٫۰۱)

در مثال ما باند یک درصدی حول ۱۰۰٬۱۷۵ از ۹۹٬۱۷۳ تا ۱۰۱٬۱۷۷ است. منبع ۸ (۱۰٬۰۱۵) و منبع ۹ (۱۰۴٬۰۰۰) بیرون باند قرار می‌گیرند و حذف می‌شوند. هشت قیمت باقی می‌ماند.

نمودار نقطه‌ای ده قیمت دلار با باند یک درصدی حول میانه
باند ±۱٪ حول میانه و دو دادهٔ پرت

روش‌های دیگر تشخیص پرت

روشایدهمزیتمحدودیت
باند درصدیفاصلهٔ نسبی از میانهساده و قابل توضیحآستانهٔ ثابت در روزهای پرنوسان ممکن است تنگ باشد
MAD (میانهٔ قدر مطلق انحراف‌ها)پراکندگی را هم با میانه می‌سنجدبا نوسان بازار خودش تطبیق می‌کندبا تعداد داده کم ناپایدار است
Z-scoreفاصله بر حسب انحراف معیاررایج در آمارخود انحراف معیار به داده‌های پرت حساس است

برای داده‌های قیمت با تعداد منبع محدود، ترکیب میانه و باند درصدی، تعادل خوبی بین سادگی، شفافیت و مقاومت می‌دهد.

میانگین وزنی و میانهٔ وزنی

همهٔ منابع هم‌ارزش نیستند. منبعی که حجم معاملات بیشتری دارد یا سابقهٔ دقیق‌تری داشته، می‌تواند وزن بیشتری بگیرد. در میانهٔ وزنی، به جای شمردن تعداد عددها، وزن‌ها شمرده می‌شوند و عددی انتخاب می‌شود که نیمی از وزن کل زیر آن باشد. این روش هم مقاومت میانه را دارد و هم کیفیت منابع را در نظر می‌گیرد.

کنترل جهش ناگهانی

گاهی همهٔ منابع یک لحظه هم‌جهت عدد غیرعادی می‌دهند؛ مثلاً چند کانال هم‌زمان یک نرخ ساختگی را بازنشر می‌کنند یا یک خبر نادرست موج کوتاهی می‌سازد. باند حول میانه این را تشخیص نمی‌دهد چون میانه هم جابه‌جا شده است. راه حل، مقایسه با آخرین نرخ منتشرشده است: اگر نرخ جدید بیش از یک آستانه (که در پنل مدیریت تنظیم می‌شود) با آخرین نرخ فاصله داشت، منتشر نمی‌شود و نرخ قبلی می‌ماند؛ مگر اینکه سطح جدید برای مدت مشخصی ادامه پیدا کند و تأیید شود. این همان کاری است که بازارهای مالی با «ترمز نوسان» انجام می‌دهند.

وقتی داده کافی نیست

میانهٔ دو عدد معنای آماری زیادی ندارد. اگر بعد از حذف داده‌های پرت کمتر از پنج منبع معتبر بماند، EZRate نرخ قبلی را حفظ و آن را با برچسب «کم‌منبع» نمایش می‌دهد. این صداقت آماری است: گفتن «مطمئن نیستیم» بهتر از نمایش با اطمینان عددی است که از دو پیام ساخته شده. این وضعیت بیشتر شب‌ها و روزهای تعطیل پیش می‌آید (ساعت کاری بازار).

نسخهٔ کد

python
from statistics import median

def robust_rate(prices, band=0.01, min_sources=5):
    if not prices:
        return None, 0
    m = median(prices)
    kept = [p for p in prices if abs(p - m) / m <= band]
    if len(kept) < min_sources:
        return None, len(kept)          # کم‌منبع: نرخ قبلی را نگه دارید
    return median(kept), len(kept)

prices = [100100, 100200, 100150, 100250, 100050, 100300, 100200, 10015, 104000, 100100]
print(robust_rate(prices))   # (100175.0, 8)

این نسخهٔ ساده‌شده است. نسخهٔ عملیاتی وزن منابع، پنجرهٔ زمانی، تشخیص واحد و کنترل جهش را هم دارد. نسخهٔ انگلیسی با تمرکز بر الگوریتم‌های آماری در Outlier Detection in Price Feeds و روش جمع‌آوری داده در OTC Market Data Aggregation آمده است. روش رسمی EZRate در روش‌شناسی آمده است و میتوانید آن را بررسی کنید.

نمودار نقطه‌ای نرخ‌های اعلامی، میانه و باند یک درصدی
حذف نرخ‌های پرت با باند یک درصدی

نرخ‌های لحظه‌ای مرتبط با این مطلب: قیمت دلار، قیمت طلای ۱۸ عیار، قیمت سکه امامی.

حذف داده پرت در قیمت ارز یعنی چه؟
یعنی کنار گذاشتن قیمت‌هایی که فاصلهٔ غیرعادی با بقیهٔ بازار دارند؛ مثل اشتباه تایپی، نرخ قدیمی یا نرخ ساختگی، تا نرخ نهایی از قیمت‌های واقعی ساخته شود.
چرا EZRate از میانه استفاده می‌کند نه میانگین؟
چون میانه به عددهای اشتباه حساس نیست و تا وقتی بیشتر منابع درست باشند، عدد درست را نشان می‌دهد.
آستانهٔ یک درصد در روزهای پرنوسان کافی است؟
در یک لحظهٔ مشخص، اختلاف منابع جدی معمولاً کمتر از یک درصد است حتی در روزهای پرنوسان؛ حرکت بازار در طول زمان با پنجرهٔ زمانی کوتاه دنبال می‌شود.
برچسب کم‌منبع یعنی نرخ اشتباه است؟
نه؛ یعنی منابع کافی برای محاسبهٔ تازه نبوده و نرخ قبلی حفظ شده است.
عرفان فضلی
من در حوزه توسعه نرم‌افزار و برنامه‌نویسی فعالیت می‌کنم و به طراحی و پیاده‌سازی راهکارهای کاربردی و بهینه علاقه‌مندم. تمرکز من بر توسعه قابلیت‌های جدید، بهبود عملکرد سیستم‌ها و حل چالش‌های فنی با استفاده از فناوری‌های روز است. در مسیر کاری خود تلاش می‌کنم با یادگیری مستمر و به‌کارگیری روش‌های نوین برنامه‌نویسی، محصولات نرم‌افزاری کارآمد، پایدار و قابل‌اعتماد توسعه دهم.
همهٔ مطالب نویسنده ←

نظرات (۰)

نظرها پس از تأیید نمایش داده می‌شوند؛ برای ارسال، ورود به حساب لازم است.

مطالب مرتبط

داده و کشف قیمت
علت تفاوت قیمت دلار در سایت ها و کانال‌ها؛ هشت دلیل و راه تشخیص عدد درست
داده و کشف قیمت
کشف قیمت دلار در بازار آزاد ایران؛ از معامله در بازار تا عدد روی صفحه
طلا و سکه
فرمول محاسبهٔ قیمت طلا با اجرت، سود فروشنده و مالیات؛ فاکتور طلافروشی را خط به خط بخوانید