ছোট খুচরা ব্যবসার ডিমান্ড ফোরকাস্টিং: আন্দাজ ছেড়ে ভরসাযোগ্য রিঅর্ডার পয়েন্টে
বিক্রির ইতিহাস পরিষ্কার করুন, সহজ moving average দিয়ে ফোরকাস্ট করুন, WAPE আর bias দিয়ে ভুল মাপুন, তারপর বানান রিঅর্ডার পয়েন্ট ও সেফটি স্টক। একটা SKU-র পুরো হিসাব, সাপ্তাহিক ৩০ মিনিটের রুটিন, আর মেশিন লার্নিং কখন কাজের।
Author
Anichur Rahaman
1 মাস আগে11 min read1 views
তিন দোকানের একটা হোমওয়্যার ব্যবসার সবচেয়ে বেশি বিক্রির কেটলিটা প্রতিটা তাক থেকেই শেষ। শুক্রবার সকালে মালিক দোকানে ঢুকতেই এক ক্রেতা ডিসপ্লের পিসটা চাইছেন, আর সরবরাহকারী জানালেন পরের চালান আসতে দুই সপ্তাহ লাগবে। এদিকে গত অক্টোবর থেকে গুদামের কোণে পড়ে আছে ১৪০টা মোমদানির একটা কার্টন, যেটা কেউ চাইছে না।
এখানে কারও গাফিলতি নেই। কেটলির রিঅর্ডার লেভেল কয়েক মাস আগে আন্দাজে ঠিক করা হয়েছিল, তখন সপ্তাহে বিক্রি হতো ৩০টা। এখন বিক্রি হয় ৫০টা, কিন্তু হিসাবটা কেউ নতুন করে করেননি। (এটা কাল্পনিক দৃশ্য, কোনো আসল দোকান নয়।)
এটা ঠিক করতে data সায়েন্স টিম লাগে না। লাগে পরিষ্কার বিক্রির ইতিহাস, এক-দুটো সহজ ফর্মুলা, আর যে পণ্যগুলো সত্যিই গুরুত্বপূর্ণ, সেগুলোর ওপর মনোযোগ দেওয়ার অভ্যাস। বেশিরভাগ লাভ আসে কয়েকটা ছোট অভ্যাস থেকে, জটিল মডেল থেকে নয়।
এই লেখায় একটা উদাহরণ ধরে ধাপগুলো দেখাব, উদাহরণের SKU-ও কেটলির মতো সপ্তাহে ৫০টা বিক্রি হয়: ইতিহাস পরিষ্কার করা, moving average দিয়ে forecast, ভুলের পরিমাণ মাপা, forecast থেকে ভরসাযোগ্য reorder point বানানো, আর কোন SKU-কে কতটা সময় দেওয়া উচিত তা ঠিক করা। উদাহরণের সব সংখ্যা কাল্পনিক।
বিক্রি নয়, চাহিদার forecast করুন
আপনার system রেকর্ড করে বিক্রি। কিন্তু forecast করতে চান চাহিদা: তাক কখনো খালি না হলে আর অস্বাভাবিক কিছু না ঘটলে ক্রেতারা যা কিনতেন।
দুটোর ফারাক মানুষের ধারণার চেয়ে বেশি। কোনো পণ্য তিন দিন stock-এ না থাকলে ওই তিন দিনের বিক্রি শূন্য। আনাড়ি forecast সেটাকে দুর্বল চাহিদা ধরে নেয়। ফলে পরের order ছোট হয়, পণ্য আবার ফুরোয়। এই চক্র চুপচাপ আপনার সবচেয়ে চলতি পণ্যগুলোর পরিসর ছোট করে দেয়।
Forecast-এর আগে ইতিহাস পরিষ্কার করুন
কোনো ফর্মুলায় যাওয়ার আগে প্রতিটি গুরুত্বপূর্ণ SKU-র শেষ ৮ থেকে ১২ সপ্তাহের data-য় দশ মিনিট দিন। চারটা জিনিস খুঁজুন:
স্টকআউট। stock শূন্য থাকা দিনগুলোতে চাহিদা কম দেখায়। স্বাভাবিক দৈনিক হারে হারানো বিক্রি আন্দাজ করে যোগ করে দিন।
একবারের বাল্ক order। কোনো কোম্পানি অনুষ্ঠানের জন্য ১০টা কিনলে সেটা ট্রেন্ড নয়। বাড়তিটুকু বাদ দিন, নইলে ফোরকাস্ট এমন চূড়ার পেছনে ছুটবে যা আর ফিরবে না।
প্রোমোশন। ছাড়ের সপ্তাহে ভবিষ্যতের বিক্রি এগিয়ে আসে। সেটা চিহ্নিত করুন, তারপর হয় বাদ দিন, নয়তো প্রোমোশনের আর স্বাভাবিক সপ্তাহের ফোরকাস্ট আলাদা করুন।
return। ফোরকাস্ট করবেন মোট বিক্রির, নাকি return বাদ দিয়ে নিট বিক্রির? return বেশি হয় এমন পণ্যে আসলে যা পুনরায় মজুত করতে হবে, তা হলো নিট চাহিদা।
নিচে আট সপ্তাহের একটা কাল্পনিক SKU। দ্বিতীয় সপ্তাহে ১০ ইউনিটের একটা একবারের বাল্ক order ছিল, আর চতুর্থ সপ্তাহে একদিন পণ্যটা stock-এ ছিল না (স্বাভাবিক দৈনিক হার ৫০ ÷ ৭ ধরলে প্রায় ৭ ইউনিটের বিক্রি হারিয়েছে)।
সপ্তাহ
রেকর্ড করা বিক্রি
সমন্বয়
পরিষ্কার চাহিদা
1
44
0
44
2
71
−10 (বাল্ক order)
61
3
52
0
52
4
31
+7 (একদিন stock ছিল না)
38
5
55
0
55
6
49
0
49
7
63
0
63
8
38
0
38
পরিষ্কার করা মোট ৪০০ ইউনিট, অর্থাৎ গড় চাহিদা সপ্তাহে ৫০ ইউনিট। কাঁচা মোট ছিল ৪০৩, প্রায় একই, কিন্তু সপ্তাহভিত্তিক ছবিটা দুই জায়গায় বেঁকে ছিল। এই বিকৃতি কতটা, সেটা পণ্যভেদে আলাদা, আর কম বিক্রির SKU-তে এটাই পুরো উত্তর পাল্টে দিতে পারে।
Trend আর seasonality: সাধারণ গড় যে দুটো ধরতে পারে না
সাধারণ গড় ধরে নেয় আগামী সপ্তাহ হবে গত কয়েক সপ্তাহের মতোই। দুটো ধরন এই ধারণা ভেঙে দেয়।
Trend হলো কয়েক মাস ধরে বিক্রির ধীর ওঠা বা পড়া। কোনো পণ্য তিন মাস ধরে মাসে ৫% করে বাড়লে শেষ আট সপ্তাহের গড় সবসময় বাস্তবের পেছনে পড়ে থাকবে।
Seasonality হলো বারবার ফিরে আসা ধরন: শীতের jacket, স্কুল খোলার আগে খাতা-কলম, ঈদের কেনাকাটা, বর্ষা, বিয়ের মৌসুম। সবচেয়ে সহজ উপায় seasonal index: কোনো একটা মাসের গড় বিক্রিকে সব মাসের গড় দিয়ে ভাগ করা। ডিসেম্বরের index ১.৪ মানে ডিসেম্বরে সাধারণ মাসের চেয়ে ৪০% বেশি বিক্রি হয়। base forecast-কে index দিয়ে গুণ করুন।
সিজনালিটি নির্ভরযোগ্যভাবে মাপতে অন্তত দুই বছরের ইতিহাস লাগে। তার কম থাকলে গত বছরের একই সময়কে মোটামুটি দিশা ধরুন, সঙ্গে জানা event-এর ক্যালেন্ডার রাখুন, কিন্তু এর ওপর বেশি ভরসা করবেন না।
যে পদ্ধতি কাজ করে, তার মধ্যে সবচেয়ে সহজটা দিয়ে শুরু করুন
স্থিতিশীল SKU-র জন্য moving average হারানো কঠিন: আগামী সপ্তাহের forecast ধরুন গত চার সপ্তাহের গড়। এটা বোঝানো সহজ, হাতে মিলিয়ে দেখা সহজ, আর এত ধীরে সাড়া দেয় যে data-র ওঠানামার পেছনে ছোটে না। Trend আর seasonality যোগ করা exponential smoothing-সহ অন্যান্য পদ্ধতি জানতে চাইলে বিনা মূল্যের বই Forecasting: Principles and Practice ভালো পরের ধাপ।
যেকোনো পদ্ধতি যাচাইয়ের ন্যায্য উপায় backtest: ধরে নিন সময়টা অতীত, যে সপ্তাহের ফল আপনি জানেন তার forecast করুন, তারপর মিলিয়ে দেখুন। ওপরের পরিষ্কার data-য় চার সপ্তাহের moving average ৫ থেকে ৮ নম্বর সপ্তাহের forecast দেয় এভাবে:
সপ্তাহ
ফোরকাস্ট (আগের ৪ সপ্তাহের গড়)
প্রকৃত
ভুল (প্রকৃত − ফোরকাস্ট)
পরম ভুল
5
48.75
55
+6.25
6.25
6
51.50
49
−2.50
2.50
7
48.50
63
+14.50
14.50
8
51.25
38
−13.25
13.25
মোট
200.00
205
+5.00
36.50
Error মাপুন: WAPE আর bias
Forecast কাজের কি না, তা দুটো সংখ্যা বলে দেয়।
WAPE (weighted absolute percentage error) হলো মোট পরম error-কে মোট প্রকৃত চাহিদা দিয়ে ভাগ করা। টেবিল থেকে: 36.5 ÷ 205 = 17.8%। এটা বেশি বিক্রির পণ্যকে বেশি গুরুত্ব দেয়, আর কোনো সপ্তাহে বিক্রি কম হলেও সঠিক ছবি দেয়, যা সাধারণ MAPE দেয় না।
Bias হলো মোট forecast বিয়োগ মোট প্রকৃত, তারপর মোট প্রকৃত দিয়ে ভাগ: (200 − 205) ÷ 205 = −2.4%। ঋণাত্মক bias মানে আপনি কম আন্দাজ করছেন। অনেক সপ্তাহ ধরে bias একদিকে থেকে গেলে সেটা শোধরানোর সংকেত, কারণ তার মানে প্রতিটা order একই দিকে ভুল, হয় ছোট, নয় বড়।
দুটোই মাপুন SKU বা ক্যাটাগরি ধরে, পুরো দোকানের জন্য একটা সংখ্যা নয়। দোকান জুড়ে ভালো সংখ্যা এমন এক ডজন পণ্য লুকিয়ে রাখতে পারে যেগুলো সবসময় ভুল। সবার জন্য একই লক্ষ্য নেই: স্থিতিশীল নিত্যপণ্যে WAPE ১০%-এর নিচে নামতে পারে, আর ফ্যাশন আইটেমে ৪০% হলেও সঠিক সেফটি stock থাকলে সামলানো যায়।
Forecast থেকে reorder point
Forecast বলে কতটা বিক্রি হবে। Reorder point বলে কখন order দেবেন। নিয়মটা সহজ:
Reorder point = lead time demand + safety stock
Lead time demand হলো সাপ্তাহিক গড় চাহিদাকে সরবরাহকারীর lead time দিয়ে গুণ। আমাদের SKU সপ্তাহে ৫০টা বিক্রি হয়, সরবরাহকারীর লাগে ২ সপ্তাহ, তাই lead time demand 50 × 2 = 100 ইউনিট।
Safety stock হলো গড়ের চেয়ে বেশি বিক্রির সপ্তাহগুলোর জন্য রাখা বাড়তি মজুত। প্রচলিত ফর্মুলা:
Safety stock = z × σ × √L
z ঠিক হয় আপনি কত service level চান তা দিয়ে। 95% মানে z = 1.65 (সঠিক মান 1.645)।
σ হলো সাপ্তাহিক চাহিদার standard deviation: গড়ের চারপাশে চাহিদা সাধারণত কতটা দোলে।
L হলো সপ্তাহে lead time। বর্গমূল আছে কারণ লম্বা সময়ে ওঠানামা খানিকটা একে অপরকে কাটাকাটি করে।
আমাদের পরিষ্কার ইতিহাসে গড় 50 থেকে বিচ্যুতিগুলো −6, +11, +2, −12, +5, −1, +13, −12। এদের বর্গের যোগফল 644, আর 644 ÷ 7 = 92, তাই σ = √92 ≈ 9.6 ইউনিট। 95% service level আর L = 2 সপ্তাহে:
1.65 × 9.6 × √2 = 1.65 × 9.6 × 1.414 ≈ 22 ইউনিট
Reorder point = 100 + 22 = 122 ইউনিট। যখন বিক্রির জন্য পাওয়া stock (on hand, সঙ্গে on order-এ আছে, বিয়োগ গ্রাহকের জন্য reserved) 122-এ নামে, তখনই order দিন।
stock 122-এ নামলে order যায়। অপেক্ষার সময়ে লিড টাইমের 100 ইউনিট শেষ হয়, আর শেষ 22 ইউনিট ব্যস্ত সপ্তাহের জন্য বাড়তি ভরসা।
Service level-এর আসল দাম
এখানে service level মানে একটা replenishment চক্র stockout ছাড়া পার করার সম্ভাবনা। প্রতিটা বাড়তি পয়েন্ট আগেরটার চেয়ে বেশি খরচ করায়।
Service level
z
Safety stock
Reorder point
90%
1.28
17
117
95%
1.65
22
122
99%
2.33
32
132
95% থেকে 99%-এ গেলে 10 ইউনিট বাড়ে, অর্থাৎ বাড়তি stock 45% বড়, আর stockout-এর আশঙ্কা প্রতি প্রায় 20 চক্রে একবার থেকে নেমে প্রায় 100 চক্রে একবারে আসে। সবচেয়ে চলতি পণ্যের জন্য এটা সস্তা বিমা। ধীরগতির, জায়গা-খাওয়া পণ্যের জন্য নয়।
ফর্মুলাটা ধরে নেয় সরবরাহকারী reliable। Lead time-ও ওঠানামা করলে বর্ধিত ফর্মুলা ব্যবহার করুন: z × √(L × σ² + d² × σL²), যেখানে d সপ্তাহে গড় চাহিদা আর σL সপ্তাহে lead time-এর standard deviation। বাস্তবে এর মানে: delivery-র আসল সময় লিখে রাখুন, আর অনিয়মিত supplier-এর জন্য বড় buffer রাখুন।
কত order করবেন
Reorder point বলে কখন order দেবেন। কতটা দেবেন, তা আসে একটা target level থেকে: stock position (on hand আর on order-এ আছে, বিয়োগ reserved) সেই লেভেলে ফিরিয়ে আনার মতো order দিন। সাপ্তাহিক পর্যালোচনায় কাজচলার টার্গেট হলো lead time demand, সঙ্গে আরও এক সপ্তাহের demand, সঙ্গে safety stock: 50 × 3 + 22 = 172 ইউনিট। দেখার দিন position 118 হলে order 172 − 118 = 54 ইউনিট।
তারপর supplier-র শর্ত মেলান। ন্যূনতম order 60 ইউনিট হলে, কিংবা পণ্য 12টার carton-এ এলে, 54 দুই ক্ষেত্রেই বেড়ে 60 হয়ে যায়। ফ্লোচার্টে পুরো সাপ্তাহিক সিদ্ধান্তটা আছে, সঙ্গে data যাচাইয়ের সেই ধাপও, যেটা stockout-এর সপ্তাহের কারণে পরের সপ্তাহের order ছোট হওয়া ঠেকায়।
বেশিরভাগ সপ্তাহ শেষ হয়ে যায় প্রথম ডায়মন্ডেই: stock রিঅর্ডার পয়েন্টের ওপরে, কোনো order যায় না।
ABC/XYZ: কোন SKU কতটা মনোযোগ পাওয়ার যোগ্য
সব SKU-কে সমান মনোযোগ দেওয়া যায় না। দুটো দ্রুত শ্রেণিবিভাগ ঠিক করে দেয় সময় কোথায় যাবে।
ABC পণ্যকে সাজায় value ধরে। প্রচলিত রীতিতে A হলো যে শীর্ষ পণ্যগুলো প্রায় 80% revenue আনে, B পরের 15%, C শেষ 5%। XYZ সাজায় predictability ধরে, coefficient of variation (σ ÷ গড় demand) দিয়ে। প্রচলিত সীমা: X হলো 0.5-এর নিচে, Y 0.5 থেকে 1.0, Z 1.0-এর ওপরে। নিজের ব্যবসা অনুযায়ী বদলে নিন।
আমাদের উদাহরণের SKU-তে 9.6 ÷ 50 = 0.19, তাই এটা X। সঙ্গে সেরা বিক্রির পণ্য হলে এটা AX: automated reorder point আর সাপ্তাহিক review-র আদর্শ প্রার্থী।
বেশি মূল্য আর স্থির চাহিদার পণ্য automation-এর যোগ্য। কম মূল্য আর এলোমেলো চাহিদার পণ্য প্রায় কিছুই পাওয়ার যোগ্য নয়।
লেবেলের চেয়ে অভ্যাসটাই বড়: CZ পণ্য আপনার সপ্তাহের এক ঘণ্টাও খাবে না, আর AZ পণ্য শুধু formula-র ভরসায় ছেড়ে দেওয়া যাবে না।
Machine learning কখন নিজের জায়গা করে নেয়
Machine learning models কাজে আসে কয়েকটা পরিস্থিতিতে:
হাজার হাজার SKU, যেখানে প্রতিটা হাতে tune করা কারও পক্ষে সম্ভব নয়।
অনেক কাজের signals: দাম বদল, promotion, আবহাওয়া, ছুটির দিন, প্রতিযোগীর stock, web traffic।
নতুন পণ্য যার কোনো ইতিহাস নেই, যেখানে model একই ধরনের পণ্য থেকে শেখে।
সম্পর্কিত পণ্য, যেমন substitutes আর bundles, যেগুলো একসঙ্গে ওঠানামা করে।
কয়েকশো SKU আর অল্প ইতিহাসের দোকানে এগুলো বেমানান। সেখানে data ভালো করে পরিষ্কার করা moving average সাধারণত সমান accurate, আর তাতে ভরসা করা অনেক সহজ। যে model ক্রেতাকে বোঝানো যায় না, ক্রেতা সেটা ডিঙিয়ে নিজের সিদ্ধান্তই নেবেন।
যে পদ্ধতিই বাছুন, পরীক্ষা একটাই: নিজের backtest-এ সেটাকে একটা সহজ baseline-র সঙ্গে লড়ান। WAPE-তে moving average-কে স্পষ্ট ব্যবধানে না হারালে moving average-ই রাখুন। জটিল কিছুতে বিনিয়োগের আগে ভিত্তিগুলো ঠিক করুন: নির্ভুল stock গণনা, প্রতিটা stock movement-র রেকর্ড আর পরিষ্কার বিক্রির ইতিহাস। এসব এক জায়গায় রাখে এমন software, যেমন StoreConsole-এর inventory module, পরিষ্কার করার কাজটা অনেক কম হাতের কাজ করে দেয়। এই ছোট ট্যুরে SKU ধরে low-stock alerts আর forecast-এর খোরাক জোগানো movement history দেখা যাবে।
inventory ট্যুর (0:54): গুদাম, stock মুভমেন্ট আর লো-stock alert এক নজরে।
সাপ্তাহিক 30-মিনিটের planning routine
Forecasting তখনই কাজে দেয়, যখন সেটা অভ্যাসে দাঁড়ায়। একবার setup হয়ে গেলে এই routine আধ ঘণ্টায় হয়ে যায়।
data-র quality দেখুন (5 মিনিট)। আপনার A পণ্যগুলোর গত সপ্তাহের বিক্রিতে stockouts, bulk orders আর promotions খুঁজে সমন্বয় করুন।
Forecast হালনাগাদ করুন (5 মিনিট)। A আর B পণ্যের moving average নতুন করুন। সময় হয়ে থাকলে seasonal index বসান।
Accuracy দেখুন (5 মিনিট)। A পণ্যের WAPE আর bias দেখুন। যে SKU-র bias টানা তিন সপ্তাহ একদিকে আছে, তার কারণ খুঁজুন।
Reorder points মিলিয়ে নিন (5 মিনিট)। যেগুলো reorder point-এ বা তার নিচে, আর পরের delivery-র আগেই যেগুলো সেখানে পৌঁছে যাবে, তার তালিকা করুন।
Orders দিন (5 মিনিট)। Order দিন, আর প্রতিশ্রুত delivery-র তারিখ লিখে রাখুন, যাতে আসলে কবে এল তার সঙ্গে মেলানো যায়।
Z পণ্য সামলান (5 মিনিট)। ঠিক করুন কোন এলোমেলো পণ্য আসল demand দেখে order করবেন, আর কোনটা stock রাখা বন্ধ করবেন।
প্রতি ত্রৈমাসিকে ABC/XYZ classes নতুন করে দেখুন, seasonal indexes হালনাগাদ করুন, আর টাটকা σ এবং মাপা lead times দিয়ে safety stock নতুন করে হিসাব করুন।
আবার সেই কেটলি। Reorder point 122 আর ওপরের সাপ্তাহিক routine থাকলে available stock 122 ছুঁতেই order চলে যায়, তখনও তাকে প্রায় আড়াই সপ্তাহের বিক্রির মাল থাকে। মোমদানি একটা CZ পণ্য, তাই গুদামের কোণ নয়, প্রতি ত্রৈমাসিকে একবার হ্যাঁ-না সিদ্ধান্ত পায়। শুক্রবারে চমক তখনও আসবে, তবে এই চমকটা নয়।
মূল কথাগুলো
বিক্রির নয়, demand-র forecast করুন: stockouts-এর হারানো বিক্রি যোগ করুন, একবারের bulk orders বাদ দিন, promotions চিহ্নিত করুন।
স্থিতিশীল SKU-র জন্য চার সপ্তাহের moving average শক্ত baseline; দুই বছরের ইতিহাস থাকলে seasonal indexes যোগ করুন।
Reorder point = lead time demand + safety stock, আর safety stock = z × σ × √L। উদাহরণে: 95% service level-এ 100 + 22 = 122 ইউনিট।
SKU ধরে WAPE আর bias মাপুন। একদিকে আটকে থাকা bias এমন ত্রুটি, যা আপনি শোধরাতে পারেন।
ABC/XYZ দিয়ে ঠিক করুন মনোযোগ কোথায় দেবেন: AX automate করুন, AZ হাতে দেখুন, CZ ছেড়ে দিন।
Machine learning তখনই, যখন অনেক SKU আর অনেক signals আছে, এবং নিজের data-য় সেটা সহজ baseline-কে হারায়।
আনিছুর রহমান একজন সফটওয়্যার আর্কিটেক্ট এবং StoreConsole-এর নির্মাতা। বাড়তে থাকা ব্যবসার জন্য তিনি কমার্স ও ERP সিস্টেম ডিজাইন করেন — বিশেষ মনোযোগ event-driven আর্কিটেকচার, ডেটার নির্ভুলতা আর নিজের সার্ভারে চালানো সিস্টেমের ওপর।