Monday, January 24, 2011

خطای رایج در مدل سازی

یک اشتباه رایج در مدل سازی وجود دارد که موجب ایجاد خطای ماندگار (steady state error) می شود. فرض کنید که می خواهید "تعداد خودروهای موجود در انبار" یک کارخانه تولید خودرو را مدل کنید. متغیرهای اصلی تان عبارتند از "تعداد خودروهای موجود در انبار"، "تولید"، "فروش" و "تعداد مطلوب خودروهای موجود در انبار". مسئله به این سادگی است که اگر 10 تعداد مطلوب خودروی موجود در انبار باشد و الان 8 تعداد خودروی موجود در انبار باشد، تعداد تولید خودروی تان برابر با 2 نیست! بلکه باید آن را برابر با "2 به علاوه میزان فروش" قرار دهید. کمی فکر کنید دلیل اش را می فهمید. اگر در هر بازه زمانی مثلا یک خودرو بفروشید برای این که تعداد انبار را از 8 به 10 برسانید باید 3 تا تولید کنید. (شکل)


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

این نکته که به نظر ساده می رسد خیلی جاها رعایت نمی شود. (به زبان ساده در مثال بالا تولید را برابر تفاوت انبار و میزان مطلوب می گذارند در صورتیکه درستش این است که تولید برابر تفاوت انبار و میزان مطلوب به اضافه فروش باشد). این امر موجب خطای ماندگار در سیستم می شود (در مثال بالا تعداد انبار هیچ وقت به تعداد مطلوب نمی رسد). در بعضی کارها، نتایج، آن چنان، با این اشتباه به هم نمی ریزد. اما چند وقت پیش مقاله ای را در یکی از ژورنال های سیاستگذاری خواندم که کار مدل سازی کرده بود و همین اشتباه را انجام داده بود. اگر این اشتباه را در مدل اش فیکس می کردید دیگر هیچ کدام از نتایج مقاله بدست نمی آمد! یعنی کلا هر چیزی که مقاله ادعا کرده بود زیر سوال می رفت.

دیروز چند بار بین "نوشتن یک یادداشت برای این ژورنال و ذکر این اشتباه" و "بی خیال شدن" نوسان کردم. نویسنده مقاله را دورادور می شناسم و همیشه ایمیل هایم را با خوش رویی جواب می دهد. از آن طرف هم دوست ندارم خودم را به عنوان کسی که نشسته و غلط های دیگران را می گیرد مشهور کنم. این بود که هی چند خط می نوشتم و بعد دوباره بی خیال می شدم. کل روز به این گذشت. ولی خداوکیلی کل مقاله و نتایج تحلیل هایش به خاطر همین اشتباه مدل سازی بود...

4 comments:

Mohammad Hossein said...

نوید جان اگر خیلی دوست داری نویسنده رو طوری متوجه اشتباهش کنی که بهش بر نخوره شاید بد نباشه وانمود کنی یک نکته از تحلیلش رو متوجه نشدی و سوالی بپرسی که توجهش به اشتباهش جلب بشه و فکر کنه خودش اشتباهش رو کشف کرده.
طبیعت آدم اینه که هر چقدر هم بزرگوار و با جنبه باشه بازم گرفتن تذکر از دیگران در مورد اشتباهاتش براش سنگینه.

Ali Marjaie said...

نوید من رفتم مدل های قبلی ام را یک نگاهی انداختم. با این پیشنهاد شما بعضی جاها در نتیجه تغییری ایجاد نمی کند. ولی سوال من این که به نظر تو میشود گفت این لینک را همیشه بایستی بگذاریم؟

navid said...

ممنون محمد حسین. توسیه ات در مایه های داستان وضو گرفتن امام حسن و حسین بود!

علی. ببین قاطی نکنی ها. این مشکل فقط زمانی هست که تو یک متغیر "مطلوب" داشته باشی و بخواهی متغیر دیگه ای بهش میل کنه. همیشه این جوری نیست. و تازه مستقیم وصل کردن خروجی به ورودی این طوری که در شکل نشان داده شده کار قشنگی نیست. من اسمش رو گذاشتم نمایش خیلی ساده شده!.. اصولا باید معنایی باشه پشت قضیه و بدونی که این اتفاق حتما می افته که این کار رو بکنی.

shaqayeq said...

:) eshtebah ke hame mikonan. ina to jahaye omomi, ye chize jalebi minevisan dar morede amniate omomi ke: if u see something, say something.
Be cool, say what makes a difference.