পাঠ ২৩ · ৫৭-এর মধ্যে · মডিউল ৫

এক্সটার্নাল রেট অফ রিটার্ন (ERR/MIRR)

External rate of return (ERR/MIRR)
১১ মিনিট পড়া মধ্যবর্তী · Intermediate Python কোডসহ সম্পূর্ণ বাংলায়

এই পাঠে যা শিখবেন

  • IRR-এর রিইনভেস্টমেন্ট-রেট ধরে-নেওয়া শর্ত, এবং এটি কেন প্রায়ই অবাস্তব
  • ERR/MIRR-এর সংজ্ঞা ও সূত্র — পজিটিভ ফ্লো FV, নেগেটিভ ফ্লো PV, তারপর একটি জ্যামিতিক গড়
  • Python-এ ERR-এর সরাসরি বন্ধ-আকারের হিসাব বাস্তবায়ন
  • একই ক্যাশ ফ্লোয় ERR ও সাধারণ IRR তুলনা করে পার্থক্যের কারণ ব্যাখ্যা

১ · IRR-এর রিইনভেস্টমেন্ট সমস্যা

IRR-এর সংজ্ঞা (L20) গাণিতিকভাবে সঠিক, কিন্তু এর একটি অন্তর্নিহিত অনুমান আছে — যখন একটি প্রজেক্ট থেকে মধ্যবর্তী বছরে ধনাত্মক ক্যাশ ফ্লো আসে, IRR হিসাব ধরে নেয় সেই টাকাটা আবার একই IRR হারে পুনর্বিনিয়োগ হচ্ছে যতক্ষণ না প্রজেক্ট শেষ হয়। যদি IRR নিজেই অস্বাভাবিক বেশি হয় (যেমন ৪০%), তাহলে বাস্তবে সেই টাকা এত বেশি হারে পুনর্বিনিয়োগ করার সুযোগ সাধারণত থাকে না — কোম্পানির প্রকৃত পুনর্বিনিয়োগ সুযোগ হয়তো MARR বা তার কাছাকাছি একটি হারেই সীমাবদ্ধ। এই অবাস্তব অনুমানই একাধিক IRR (L21) সমস্যাকেও আরও জটিল করে তোলে।

IRR-এর অনুমান
মধ্যবর্তী পজিটিভ ফ্লো IRR হারেই পুনর্বিনিয়োগ হয় — প্রায়ই অবাস্তব।
ERR-এর অনুমান
পজিটিভ ফ্লো একটি বাস্তবসম্মত এক্সটার্নাল রেট $e$-এ পুনর্বিনিয়োগ হয় — সাধারণত MARR-এর কাছাকাছি।
সমাধান পদ্ধতি
রুট-ফাইন্ডিং লাগে না — FV ও PV বের করে সরাসরি একটি জ্যামিতিক গড় সূত্র প্রয়োগ করা হয়।

২ · ERR/MIRR সূত্র

ERR হিসাব করতে দুটো ধাপ লাগে — সব ধনাত্মক ক্যাশ ফ্লোকে এক্সটার্নাল রেট $e$-এ কম্পাউন্ড করে বছর $n$-এ ভবিষ্যৎ মূল্যে ($FV_{pos}$) আনা হয়, আর সব ঋণাত্মক ক্যাশ ফ্লোকে একটি ফাইন্যান্সিং রেটে (প্রায়ই MARR-এর সমান ধরা হয়) বছর ০-তে বর্তমান মূল্যে ($PV_{neg}$, ধনাত্মক পরিমাণ হিসেবে) ছাড় দেওয়া হয়। তারপর —

$$ERR = \left(\frac{FV_{pos}}{PV_{neg}}\right)^{1/n} - 1$$

এটি মূলত একটি সিঙ্গেল-পেমেন্ট সমতা — শুরুর $PV_{neg}$ কে $n$ বছরে $FV_{pos}$-এ রূপান্তরিত করতে দরকারি বার্ষিক হার বের করা — যা M2-এর $F=P(1+i)^n$ সূত্র থেকে সরাসরি সমাধান করা যায় ($i = (F/P)^{1/n}-1$), তাই কোনো রুট-ফাইন্ডিং লাগে না।

৩ · Python-এ ERR গণনা ও IRR-এর সাথে তুলনা

একটি মিশ্র-চিহ্নের ক্যাশ ফ্লো — বছর ০-এ $15,000 বিনিয়োগ, বছর ১-২-এ যথাক্রমে $5,000 ও $4,000 আয়, বছর ৩-এ $3,000 বাড়তি খরচ, বছর ৪-৫-এ $8,000 ও $9,000 আয় — নিচের কোডে এক্সটার্নাল রেট ও ফাইন্যান্সিং রেট দুটোই ৮% ধরে ERR বের করা হয়েছে, এবং তুলনার জন্য L20-এর একই বাইসেকশন find_irr() দিয়ে সাধারণ IRR-ও বের করা হয়েছে।

Python
# ERR/MIRR -- পজিটিভ ফ্লো FV-তে, নেগেটিভ ফ্লো PV-তে, তারপর একটি জ্যামিতিক গড়

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

# (বছর, ক্যাশ ফ্লো) -- মিশ্র-চিহ্নের সিরিজ
cashflows = [(0, -15000), (1, 5000), (2, 4000), (3, -3000), (4, 8000), (5, 9000)]
n = 5
e = 0.08         # এক্সটার্নাল রিইনভেস্টমেন্ট রেট (পজিটিভ ফ্লোর জন্য)
fin_rate = 0.08  # ফাইন্যান্সিং রেট (নেগেটিভ ফ্লোর জন্য)

FV_pos = sum(cf * (1 + e) ** (n - t) for t, cf in cashflows if cf > 0)
PV_neg = sum(-cf / (1 + fin_rate) ** t for t, cf in cashflows if cf < 0)

ERR = (FV_pos / PV_neg) ** (1 / n) - 1

print("ক্যাশ ফ্লো (বছর, পরিমাণ):", cashflows)
print(f"পজিটিভ ফ্লোগুলো বছর {n}-এ কম্পাউন্ড করা FV_pos = ${FV_pos:,.2f}")
print(f"নেগেটিভ ফ্লোগুলো বছর ০-এ ছাড় দেওয়া PV_neg = ${PV_neg:,.2f}")
print(f"ERR = (FV_pos / PV_neg)^(1/{n}) - 1 = {ERR*100:.4f}%")
print()

irr_ordinary = find_irr(cashflows)
print(f"তুলনার জন্য সাধারণ IRR (বাইসেকশন) = {irr_ordinary*100:.4f}%   (NPV চেক = ${npv(cashflows, irr_ordinary):,.6f})")
print(f"পার্থক্য (IRR - ERR) = {(irr_ordinary - ERR)*100:.4f} শতাংশ পয়েন্ট -- রিইনভেস্টমেন্ট অনুমানের প্রভাব দেখায়")

    
এই ক্যাশ ফ্লোতে চিহ্ন তিনবার বদলায় ($-,+,+,-,+,+$), অর্থাৎ Descartes' rule (L21) অনুযায়ী সর্বোচ্চ ৩টি ধনাত্মক IRR থাকতে পারে — এই কোডের বাইসেকশন ব্র্যাকেট $[-0.5, 1.0]$-এর মধ্যে যে একটি রুট খুঁজে পায়, সেটাই একমাত্র রুট কি না তা নিশ্চিত নয় (L21-এর রেঞ্জ-স্ক্যান কৌশল দিয়ে যাচাই করা যেত)। ERR-এর একটি বড় সুবিধা এখানেই — এতে কোনো রুট-ফাইন্ডিং নেই, তাই একাধিক-মূল্যের সমস্যাও নেই — এটি সবসময় ঠিক একটি, সুনির্দিষ্ট উত্তর দেয়।
মূল কথা · Key takeaway

IRR নিঃশব্দে ধরে নেয় মধ্যবর্তী রিটার্ন IRR হারেই পুনর্বিনিয়োগ হবে, যা প্রায়ই অবাস্তব ও একাধিক-মূল্যের সমস্যায় জড়িয়ে যেতে পারে। ERR/MIRR একটি বাস্তবসম্মত এক্সটার্নাল রেট ব্যবহার করে এই সমস্যা এড়ায়, এবং যেহেতু এটি বন্ধ-আকারের হিসাব (রুট-ফাইন্ডিং নয়), তাই ফলাফল সবসময় অনন্য (unique)। পরের পাঠে দেখা যাবে কখন IRR-এর বদলে PW/AW ব্যবহার করাই সবচেয়ে নিরাপদ পথ।

ভাবনার প্রশ্ন

প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।

প্র ০১ এক্সটার্নাল রেট $e$ সাধারণত কী মানের কাছাকাছি ধরা হয়, এবং কেন MARR নয় বরং IRR-এর মতো উচ্চ কোনো হার ধরা হয় না?

$e$ সাধারণত MARR-এর কাছাকাছি বা কোম্পানির প্রকৃত গড় পুনর্বিনিয়োগ সুযোগের হার ধরা হয় — কারণ এটাই বাস্তবে কোম্পানি টাকাটা কোথায় পুনর্বিনিয়োগ করতে পারে তার সবচেয়ে বিশ্বাসযোগ্য অনুমান। IRR-এর মতো উচ্চ হার ধরলে ঠিক IRR-এর একই সমস্যায় ফিরে যাওয়া হবে — অবাস্তব উচ্চ পুনর্বিনিয়োগ ধরে নেওয়া।

প্র ০২ ERR সূত্রে কেন $1/n$ ঘাত ব্যবহার করা হয়, বর্গমূল বা অন্য কোনো ঘাত নয়?

কারণ $FV_{pos}=PV_{neg}\times(1+ERR)^n$ সম্পর্কটি M2-এর সিঙ্গেল-পেমেন্ট কম্পাউন্ড সূত্রের সরাসরি প্রয়োগ, যেখানে $n$ বছর ধরে কম্পাউন্ডিং হয়। এই সমীকরণকে $ERR$-এর জন্য সমাধান করলে $ERR=(FV_{pos}/PV_{neg})^{1/n}-1$ পাওয়া যায় — $1/n$ ঘাতটি ঠিক $n$-তম মূল (n-th root) নেওয়ার গাণিতিক প্রয়োজন থেকে আসে।

প্র ০৩ যদি একটি ক্যাশ ফ্লোতে কোনো ঋণাত্মক মধ্যবর্তী মান না থাকে (শুধু বছর ০-এ একবার বিনিয়োগ), তাহলে ERR ও IRR কেমন সম্পর্কে থাকবে?

তখনও তারা ভিন্ন হতে পারে, কারণ পার্থক্যটা মূলত রিইনভেস্টমেন্ট রেটের অনুমান থেকে আসে — IRR নিজের হারেই পুনর্বিনিয়োগ ধরে, ERR বাস্তবসম্মত $e$ ধরে। যদি IRR ও $e$ কাকতালীয়ভাবে সমান হয়, তখনই কেবল দুটো মান মিলে যাবে — সাধারণত তারা কাছাকাছি হলেও ঠিক সমান হয় না।

অনুশীলন

  1. চিন্তা করুন: যদি এক্সটার্নাল রেট $e$ বাড়ানো হয় (ধরুন ৮% থেকে ১৫%), ERR-এর কী পরিবর্তন হবে, এবং কেন?

    $e$ বাড়লে $FV_{pos}$ বাড়বে (পজিটিভ ফ্লোগুলো আরও বেশি হারে কম্পাউন্ড হবে), যার ফলে $FV_{pos}/PV_{neg}$ অনুপাত বাড়বে, তাই ERR-ও বাড়বে। তবে এই বৃদ্ধি সরাসরি সমানুপাতিক নয় — কারণ $1/n$ ঘাতের কারণে ফলাফল কিছুটা "গড়" (averaged) হয়ে আসে।

  2. পরীক্ষা করুন: উপরের কোড সেলে fin_rate-কে 0.08 থেকে 0.05-এ বদলে (এক্সটার্নাল রেট e অপরিবর্তিত রেখে) Run চেপে দেখুন ERR কীভাবে বদলায়।

    fin_rate কমালে PV_neg বাড়বে (কম হারে ছাড় দেওয়া মানে বর্তমান মূল্য বেশি হয়), ফলে FV_pos / PV_neg অনুপাত কমবে, তাই ERR-ও কিছুটা কমবে। এটি দেখায় ERR শুধু e-এর উপর নয়, ফাইন্যান্সিং রেটের উপরও নির্ভরশীল — দুটো আলাদা ধরে-নেওয়া শর্ত।

আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ

  • কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ টাইম ভ্যালু অফ মানি, ক্যাশ ফ্লো সিরিজ, ওয়ার্থ-ভিত্তিক তুলনা, রেট অফ রিটার্ন, ডেপ্রিসিয়েশন, ট্যাক্স, ইনফ্লেশন, রিস্ক অ্যানালাইসিস ও ক্যাপিটাল বাজেটিং — সম্পূর্ণ কোর্স এক জায়গায়।
  • Discrete Mathematics কোর্স সহোদর কোর্স সিঙ্গেল-পেমেন্ট কম্পাউন্ডিং সম্পর্কের গাণিতিক ভিত্তি — ERR সূত্রের মূল উৎস।
  • সব 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 — সব এক জায়গায়।
আগের পাঠ
ইনক্রিমেন্টাল রেট অফ রিটার্ন অ্যানালাইসিস