PW, AW ও ROR পদ্ধতির মধ্যে বাছাই
এই পাঠে যা শিখবেন
- PW/FW/AW পদ্ধতি কখন সবচেয়ে সহজ ও সরাসরি — এবং কেন এগুলো সবসময় সামঞ্জস্যপূর্ণ সিদ্ধান্ত দেয়
- IRR/ROR পদ্ধতি কখন সুবিধাজনক (সহজবোধ্যতা), এবং কখন ঝুঁকিপূর্ণ (র্যাংকিং, একাধিক-মূল)
- একই ডেটাসেটে তিনটি পদ্ধতি একসাথে গণনা করে তুলনা করার ব্যবহারিক অভ্যাস
- Python-এ PW ও AW র্যাংকিংয়ের মিল কোডের মাধ্যমেই প্রত্যক্ষভাবে যাচাই করা
১ · কোন পদ্ধতি কখন সুবিধাজনক
যখন প্রজেক্টের মোট আর্থিক মূল্য একটি একক সংখ্যায় দেখানো জরুরি — বাজেট অনুমোদন, বিনিয়োগ তুলনায় সবচেয়ে সরাসরি।
যখন ফলাফল "বার্ষিক" ভাষায় দরকার (যেমন বার্ষিক বাজেট প্রতিবেদন), অথবা জীবনকাল ভিন্ন হলে (AW-রিপিটেবিলিটি ধরে সরাসরি তুলনা)।
যখন ফলাফল একটি % হিসেবে যোগাযোগ করা সহজ — বিশেষত অ-আর্থিক বিশেষজ্ঞ স্টেকহোল্ডারদের কাছে — তবে ranking-এ সতর্কতা দরকার।
PW, FW ও AW একে অপরের গাণিতিক রূপান্তর মাত্র (M4-এ দেখানো হয়েছে) — তাই তিনটির যেকোনো একটি দিয়ে সঠিকভাবে অল্টারনেটিভ তুলনা করলে সবসময় একই গ্রহণ/প্রত্যাখ্যান ও একই র্যাংকিং সিদ্ধান্ত আসবে (শর্ত — সমান জীবনকাল, অথবা M4-এর অসম-জীবনকাল কৌশল সঠিকভাবে প্রয়োগ করা হলে)। IRR ভিন্ন — এটি একটি % হওয়ায় স্বজ্ঞাগতভাবে আকর্ষণীয়, কিন্তু র্যাংকিংয়ে নির্ভরযোগ্য হতে ইনক্রিমেন্টাল অ্যানালাইসিস (L22) বাধ্যতামূলক — শুধু গ্রহণ/প্রত্যাখ্যান সিদ্ধান্তে (একক প্রজেক্ট, IRR vs MARR) এটি সরাসরি নির্ভরযোগ্য।
২ · Python-এ তিনটি পদ্ধতি একসাথে — একটি তুলনা
তিনটি সরঞ্জাম বিকল্প X, Y, Z — প্রতিটির জীবনকাল ৫ বছর, MARR = ১০% —
- X: খরচ $15,000, বার্ষিক সুবিধা $4,500
- Y: খরচ $20,000, বার্ষিক সুবিধা $5,800
- Z: খরচ $25,000, বার্ষিক সুবিধা $7,000
নিচের কোডে প্রতিটির PW (M4-এর P/A ফ্যাক্টর দিয়ে), AW (PW থেকে A/P ফ্যাক্টর দিয়ে), ও IRR (L20-এর বাইসেকশন দিয়ে) একসাথে গণনা করে একটি তুলনা টেবিল প্রিন্ট করা হয়েছে, তারপর PW ও AW র্যাংকিং একই কি না তা সরাসরি কোডে যাচাই করা হয়েছে।
# PW, AW ও IRR একসাথে গণনা -- তিনটি অল্টারনেটিভের তুলনা
def pw_factor(i, n):
return ((1 + i) ** n - 1) / (i * (1 + i) ** n)
def ap_factor(i, n):
return (i * (1 + i) ** n) / ((1 + i) ** n - 1)
def npv(cashflows, i):
return sum(cf / (1 + i) ** t for t, cf in cashflows)
def find_irr(cashflows, lo=-0.5, hi=1.0, tol=1e-7, max_iter=200):
f_lo = npv(cashflows, lo)
f_hi = npv(cashflows, hi)
if f_lo * f_hi > 0:
raise ValueError("bracket-এ NPV চিহ্ন বদলাচ্ছে না")
for _ in range(max_iter):
mid = (lo + hi) / 2
f_mid = npv(cashflows, mid)
if abs(f_mid) < tol or (hi - lo) / 2 < tol:
return mid
if f_lo * f_mid < 0:
hi = mid
else:
lo = mid
f_lo = f_mid
return (lo + hi) / 2
MARR = 0.10
n = 5
alternatives = {
"X": {"cost": 15000, "benefit": 4500},
"Y": {"cost": 20000, "benefit": 5800},
"Z": {"cost": 25000, "benefit": 7000},
}
results = {}
for name, alt in alternatives.items():
cost, benefit = alt["cost"], alt["benefit"]
pw = -cost + benefit * pw_factor(MARR, n)
aw = pw * ap_factor(MARR, n)
cashflows = [(0, -cost)] + [(t, benefit) for t in range(1, n + 1)]
irr = find_irr(cashflows)
results[name] = {"pw": pw, "aw": aw, "irr": irr}
print(f"Alt {name}: cost=${cost:,.0f}, benefit=${benefit:,.0f}/yr -> "
f"PW=${pw:,.2f} AW=${aw:,.2f} IRR={irr*100:.2f}%")
pw_rank = sorted(results, key=lambda k: results[k]["pw"], reverse=True)
aw_rank = sorted(results, key=lambda k: results[k]["aw"], reverse=True)
irr_rank = sorted(results, key=lambda k: results[k]["irr"], reverse=True)
print()
print(f"PW র্যাংকিং (বেশি থেকে কম): {pw_rank}")
print(f"AW র্যাংকিং (বেশি থেকে কম): {aw_rank}")
print(f"IRR র্যাংকিং (বেশি থেকে কম): {irr_rank}")
print(f"PW ও AW র্যাংকিং একই কি না: {pw_rank == aw_rank}")
pw_rank == aw_rank সবসময় True — এটি কাকতালীয় নয়, বরং
গাণিতিক নিশ্চয়তা, কারণ aw = pw * ap_factor(MARR, n) সমান জীবনকালের সব অল্টারনেটিভের জন্য একই
ধনাত্মক সংখ্যা দিয়ে গুণ করে, যা কখনো র্যাংকিং উল্টে দিতে পারে না। এই উদাহরণে irr_rank-ও
কাকতালীয়ভাবে একই ক্রমে আসে — কিন্তু এটি কোডে assert করা হয়নি, কারণ এটি সাধারণভাবে সত্যি
নয়: ভিন্ন খরচ/সুবিধা অনুপাতের অল্টারনেটিভে IRR র্যাংকিং PW/AW র্যাংকিং থেকে সহজেই আলাদা হয়ে যেতে পারে (L22-এর
উদাহরণ দ্রষ্টব্য) — তাই র্যাংকিংয়ে IRR ব্যবহার করতে হলে সবসময় ইনক্রিমেন্টাল অ্যানালাইসিস দিয়ে নিশ্চিত করা
প্রয়োজন।
সমান জীবনকালের অল্টারনেটিভ তুলনায় PW ও AW সবসময় একমত হয় — তাই যেকোনো একটি সরাসরি ব্যবহার করা নিরাপদ। IRR তার সহজবোধ্য % ফরম্যাটের কারণে জনপ্রিয়, কিন্তু গ্রহণ/প্রত্যাখ্যান সিদ্ধান্তের বাইরে গিয়ে একাধিক অল্টারনেটিভ র্যাংক করতে হলে সবসময় ইনক্রিমেন্টাল অ্যানালাইসিস (L22) প্রয়োজন, আর নন-কনভেনশনাল ক্যাশ ফ্লোতে ERR/MIRR (L23) বিবেচনা করতে হয়। এই পাঠের মাধ্যমে মডিউল ৫ শেষ হলো — এরপর M6-এ বেনিফিট-কস্ট অ্যানালাইসিস দিয়ে পাবলিক-সেক্টর প্রজেক্ট মূল্যায়নে যাওয়া হবে।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ PW ও AW র্যাংকিং সমান জীবনকালে কখনো আলাদা হতে পারে না কেন — এটা গাণিতিকভাবে ব্যাখ্যা করুন।
কারণ $AW = PW \times (A/P\text{ factor})$, আর একটি নির্দিষ্ট $MARR$ ও $n$-এর জন্য A/P ফ্যাক্টর সব অল্টারনেটিভের জন্য একই ধনাত্মক ধ্রুবক। একটি তালিকার প্রতিটি সংখ্যাকে একই ধনাত্মক সংখ্যা দিয়ে গুণ করলে তাদের আপেক্ষিক ক্রম কখনো বদলায় না — তাই PW বেশি হলে AW-ও বেশি হবে, ক্রম অপরিবর্তিত থাকবে।
প্র ০২ যদি তিনটি অল্টারনেটিভের জীবনকাল ভিন্ন হতো (যেমন X=৫ বছর, Y=৭ বছর, Z=১০ বছর), তাহলে উপরের কোড সরাসরি ব্যবহার করা যেত কি?
না, সরাসরি নয় — PW তুলনা করতে হলে L19-এর কৌশল (LCM জীবনকাল বা স্টাডি পিরিয়ড) প্রয়োগ করতে হতো, অথবা AW ব্যবহার করলে "রিপিটেবিলিটি" অনুমান (প্রতিটি অল্টারনেটিভ নিজের জীবনকাল শেষে অভিন্নভাবে পুনরাবৃত্তি হয়) ধরে সরাসরি তুলনা করা যেত। এটাই AW-এর একটি বাস্তব সুবিধা — অসম জীবনকালেও LCM ছাড়াই তুলনা করা যায়।
প্র ০৩
কেন কোডে irr_rank == pw_rank assert করা হয়নি, যদিও এই নির্দিষ্ট উদাহরণে তারা মিলে
গেছে?
কারণ এটি একটি গাণিতিক নিশ্চয়তা নয়, শুধু এই নির্দিষ্ট সংখ্যায় একটি কাকতালীয় মিল — সাধারণভাবে IRR
র্যাংকিং PW/AW র্যাংকিং থেকে আলাদা হয়ে যেতে পারে (L22-এ দেখা গেছে কীভাবে)। মিথ্যা assert
লেখা এই কোর্সের নীতির বিরোধী — কোড শুধু সেই সম্পর্কগুলোই assert করে যা সবসময় সত্যি
(যেমন PW==AW র্যাংকিং), অনুমানভিত্তিক মিল নয়।
অনুশীলন
-
চিন্তা করুন: একজন নন-টেকনিক্যাল ম্যানেজারের কাছে একটি প্রজেক্টের ফলাফল উপস্থাপন করতে হলে
PW ($) ও IRR (%) — কোনটি বেশি কার্যকর হতে পারে, এবং কেন?
IRR (%) প্রায়ই বেশি সহজবোধ্য মনে হয়, কারণ এটি একটি একক, তুলনাযোগ্য সংখ্যা যা সরাসরি "কতটা ভালো রিটার্ন" বোঝায় — ব্যাংক সুদের হারের সাথে তুলনা করা সহজ। কিন্তু PW ($) প্রজেক্টের প্রকৃত মূল্য-তৈরির পরিমাণ (স্কেল) বোঝায়, যা বাজেট সিদ্ধান্তে গুরুত্বপূর্ণ — তাই বাস্তবে দুটোই একসাথে উপস্থাপন করাই সবচেয়ে কার্যকর।
-
পরীক্ষা করুন: উপরের কোড সেলে Alt Z-এর
benefit-কে7000থেকে9000-এ বদলে Run চেপে দেখুন IRR র্যাংকিং PW/AW র্যাংকিং থেকে আলাদা হয়ে যায় কি না।Z-এর সুবিধা বাড়ালে Z-এর IRR ও PW/AW দুটোই বাড়বে, এবং এই নির্দিষ্ট পরিবর্তনে হয়তো Z সবচেয়ে আকর্ষণীয় হয়ে উঠবে — সব র্যাংকিংয়েই। তবে বিভিন্ন সংখ্যা পরীক্ষা করলে (যেমন খরচ ও সুবিধার অনুপাত ইচ্ছাকৃতভাবে ভিন্ন ভিন্ন করে) এমন সংমিশ্রণ পাওয়া সম্ভব যেখানে IRR র্যাংকিং PW/AW র্যাংকিং থেকে সরে যায় — যা আবার প্রমাণ করে কেন IRR র্যাংকিং একা নির্ভরযোগ্য নয়।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ টাইম ভ্যালু অফ মানি, ক্যাশ ফ্লো সিরিজ, ওয়ার্থ-ভিত্তিক তুলনা, রেট অফ রিটার্ন, ডেপ্রিসিয়েশন, ট্যাক্স, ইনফ্লেশন, রিস্ক অ্যানালাইসিস ও ক্যাপিটাল বাজেটিং — সম্পূর্ণ কোর্স এক জায়গায়।
- Discrete Mathematics কোর্স সহোদর কোর্স সিকোয়েন্স ও সিরিজের সমষ্টির সূত্র — এই মডিউলের প্রতিটি PW/AW/IRR হিসাবের গাণিতিক ভিত্তি সেখানেই তৈরি হয়েছে।
- সব Courses দেখুন ABCL TECH C, C++, Python, Java, JavaScript, DSA, DBMS, Discrete Mathematics, System Design, Cybersecurity, Cloud Computing & DevOps, Computer Networks, Operating Systems, Computer Architecture, Programming Languages & Compiler Design, Software Engineering & Git, Theory of Computation ও Engineering Economics — সব এক জায়গায়।