রেট অফ রিটার্ন ও ব্রেকইভেনে ইনফ্লেশনের প্রভাব
এই পাঠে যা শিখবেন
- নমিনাল (অ্যাকচুয়াল-ডলার) IRR ও রিয়েল IRR-এর মধ্যে পার্থক্য, এবং কেন শুধু নমিনাল সংখ্যা দেখা বিভ্রান্তিকর হতে পারে
- নমিনাল IRR ইনফ্লেশনের নিচে নামলে রিয়েল রিটার্ন ঋণাত্মক হয়ে যাওয়ার শর্ত
- ডিফারেনশিয়াল ইনফ্লেশন কী — যখন দাম ও খরচ ভিন্ন হারে বাড়ে — এবং এটি ব্রেকইভেন কোয়ান্টিটিকে কীভাবে প্রভাবিত করে
- Python দিয়ে বিসেকশন পদ্ধতিতে সত্যিকারের IRR সলভ করা, এবং একটি বছর-ভিত্তিক ব্রেকইভেন-শিফট টেবিল তৈরি করা
১ · নমিনাল IRR বনাম রিয়েল IRR
L39-এর ফিশার ইকুয়েশন শুধু সুদের হারেই প্রযোজ্য নয় — যেকোনো রেট অফ রিটার্নও একইভাবে "নমিনাল" ও "রিয়েল"-এ ভাগ করা যায়। যদি একটি প্রজেক্টের ক্যাশ ফ্লো অ্যাকচুয়াল (then-current) ডলারে দেওয়া থাকে এবং তা থেকে IRR বের করা হয়, সেই IRR আসলে একটি নমিনাল/কম্বাইন্ড রেট — এতে ইনফ্লেশনও মিশে আছে। প্রকৃত ক্রয়ক্ষমতায় প্রজেক্টটি আসলে কতটা লাভজনক তা বুঝতে ফিশার সম্পর্ক দিয়ে রিয়েল IRR বের করা দরকার —
$$IRR_{real} = \dfrac{IRR_{nominal} - f}{1 + f}$$
যদি $IRR_{nominal} < f$ (নমিনাল IRR ইনফ্লেশনের চেয়ে কম), তাহলে $IRR_{real} < 0$ — প্রকৃত ক্রয়ক্ষমতায় প্রজেক্টটি লাভজনক নয়, ক্ষতিকর।
রিপোর্টে শুধু নমিনাল IRR দেখানো হলে (যা প্রায়ই বড় সংখ্যা মনে হয়) সিদ্ধান্ত-গ্রহণকারী ভাবতে পারেন প্রজেক্টটি যথেষ্ট লাভজনক, অথচ MARR-এর সাথে তুলনা করার সময় সামঞ্জস্যপূর্ণ (নমিনাল-নমিনাল বা রিয়েল-রিয়েল) তুলনা না করলে ভুল সিদ্ধান্ত হতে পারে।
২ · কোড: বিসেকশনে IRR, তারপর রিয়েল IRR
নিচের কোডে একটি প্রজেক্ট — আজ $20,000 খরচ, তারপর ৫ বছর ধরে বছরে $5,500 (অ্যাকচুয়াল ডলার) আয় — এর নমিনাল IRR একটি প্রকৃত বিসেকশন রুট-ফাইন্ডিং দিয়ে বের করা হচ্ছে (কোনো মুখস্থ সংখ্যা নয়, প্রতিটি ধাপে NPV হিসাব করে রেঞ্জ সংকুচিত করা হচ্ছে)। তারপর ৬% প্রত্যাশিত ইনফ্লেশনে ফিশার সম্পর্ক দিয়ে রিয়েল IRR বের করা হচ্ছে।
# নমিনাল IRR (বিসেকশন) -> ফিশার সম্পর্ক দিয়ে রিয়েল IRR
def npv(rate, cash_flows):
return sum(cf / (1 + rate) ** t for t, cf in enumerate(cash_flows))
def find_irr(cash_flows, lo=-0.5, hi=1.0, tol=1e-9, max_iter=200):
npv_lo = npv(lo, cash_flows)
npv_hi = npv(hi, cash_flows)
assert npv_lo * npv_hi < 0, "bracket-এ সাইন বদল নেই -- রেঞ্জ বাড়ান"
mid, npv_mid = lo, npv_lo
for _ in range(max_iter):
mid = (lo + hi) / 2
npv_mid = npv(mid, cash_flows)
if abs(npv_mid) < tol:
break
if npv_lo * npv_mid < 0:
hi = mid
else:
lo, npv_lo = mid, npv_mid
return mid, npv_mid
def real_rate(i_combined, f):
return (i_combined - f) / (1 + f)
# --- প্রজেক্ট: আজ $20,000 খরচ, ৫ বছর ধরে বছরে $5,500 (actual dollars) আয় ---
cash_flows = [-20000] + [5500] * 5
nominal_irr, converged_npv = find_irr(cash_flows)
print(f"নমিনাল/actual-dollar IRR = {nominal_irr*100:.4f}%")
print(f"কনভার্জড NPV @ IRR = ${converged_npv:.6f} (প্রায় শূন্য -- বিসেকশন সঠিকভাবে কনভার্জ করেছে)\n")
f = 0.06 # প্রত্যাশিত ইনফ্লেশন
real_irr = real_rate(nominal_irr, f)
print(f"ইনফ্লেশন f = {f*100:.2f}%")
print(f"ফিশার সম্পর্ক থেকে রিয়েল IRR = {real_irr*100:.4f}%")
print(f"-> নমিনাল IRR দেখতে ভালো মনে হলেও, ইনফ্লেশন বাদ দিলে প্রকৃত মার্জিন অনেক পাতলা")
৩ · ডিফারেনশিয়াল ইনফ্লেশন ও শিফটিং ব্রেকইভেন
ব্রেকইভেন কোয়ান্টিটির সূত্র (M11-এ বিস্তারিত) হলো $Q_{BE} = FC/(SP-VC)$ — ফিক্সড কস্ট ভাগ মার্জিন (বিক্রয়মূল্য বিয়োগ ভেরিয়েবল কস্ট)। যদি বিক্রয়মূল্য (SP) ও ভেরিয়েবল কস্ট (VC) একই হারে ইনফ্লেট হতো, মার্জিনও একই অনুপাতে বাড়ত এবং ব্রেকইভেন কোয়ান্টিটি অপরিবর্তিত থাকত। কিন্তু বাস্তবে প্রায়ই এরা ভিন্ন হারে বাড়ে — একে বলে ডিফারেনশিয়াল ইনফ্লেশনDifferential Inflationযখন একটি প্রজেক্টের বিভিন্ন উপাদান (দাম, খরচ) ভিন্ন হারে ইনফ্লেট হয়, একই সামগ্রিক ইনফ্লেশন হারে নয়।। যদি ভেরিয়েবল কস্ট বিক্রয়মূল্যের চেয়ে দ্রুত হারে বাড়ে (যেমন কাঁচামালের দাম দ্রুত বাড়ছে কিন্তু প্রতিযোগিতার কারণে বিক্রয়মূল্য বাড়ানো যাচ্ছে না), মার্জিন সময়ের সাথে সংকুচিত হয় এবং একই মুনাফা অর্জনে বেশি ইউনিট বিক্রি করতে হয়।
# ডিফারেনশিয়াল ইনফ্লেশন -- SP বছরে ৩% বাড়ে, VC বছরে ৭% বাড়ে -- ব্রেকইভেন শিফট
FC = 50000 # ফিক্সড কস্ট (নমিনাল, স্থির ধরা হয়েছে -- মূল ফোকাস মার্জিন-শিফটে)
SP0 = 40.0 # আজকের প্রতি-ইউনিট বিক্রয়মূল্য
VC0 = 25.0 # আজকের প্রতি-ইউনিট ভেরিয়েবল কস্ট
sp_inflation = 0.03
vc_inflation = 0.07
print(f"FC = ${FC:,.0f}, SP0 = ${SP0:.2f}, VC0 = ${VC0:.2f}")
print(f"SP ইনফ্লেশন = {sp_inflation*100:.0f}%/yr, VC ইনফ্লেশন = {vc_inflation*100:.0f}%/yr\n")
print(f"{'বছর':>4} | {'SP':>8} | {'VC':>8} | {'মার্জিন (SP-VC)':>16} | {'Q_BE':>10}")
print("-" * 56)
for t in range(0, 6):
sp_t = SP0 * (1 + sp_inflation) ** t
vc_t = VC0 * (1 + vc_inflation) ** t
margin_t = sp_t - vc_t
q_be_t = FC / margin_t
print(f"{t:>4} | ${sp_t:>6.2f} | ${vc_t:>6.2f} | ${margin_t:>14.2f} | {q_be_t:>9,.1f}")
নমিনাল সংখ্যা একা কখনো পুরো গল্প বলে না। যেকোনো IRR-কে ইনফ্লেশন থেকে আলাদা করে (রিয়েল IRR) দেখাই বলে দেয় প্রকৃত ক্রয়ক্ষমতায় প্রজেক্টটি কতটা লাভজনক — এবং যখন বিভিন্ন উপাদান ভিন্ন হারে ইনফ্লেট হয় (ডিফারেনশিয়াল ইনফ্লেশন), ব্রেকইভেন বা মার্জিনের মতো "স্থির" ধরে নেওয়া রাশিও আসলে সময়ের সাথে বদলাতে পারে। M9-এর এই চারটি পাঠ (L38-L41) একসাথে ইনফ্লেশনকে সঠিকভাবে যেকোনো ইঞ্জিনিয়ারিং ইকোনমিক অ্যানালাইসিসে যুক্ত করার সম্পূর্ণ টুলকিট দিলো — M10-এ (কস্ট এস্টিমেশন) এই একই ধারণাগুলো কস্ট ইনডেক্স ও লার্নিং কার্ভের সাথে আরও প্রয়োগ হবে।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ যদি একটি প্রজেক্টের নমিনাল IRR ৫% হয় এবং প্রত্যাশিত ইনফ্লেশন ৭%, তাহলে রিয়েল IRR-এর ব্যাপারে কী বলা যায়, এবং এর ব্যবহারিক অর্থ কী?
real_rate(0.05, 0.07) = (0.05-0.07)/1.07 ≈ -0.0187 — একটি ঋণাত্মক (প্রায় -১.৮৭%) রিয়েল
IRR। ব্যবহারিক অর্থ — টাকার অঙ্কে বিনিয়োগ বাড়লেও, প্রকৃত ক্রয়ক্ষমতায় বিনিয়োগকারী ক্ষতির মুখে পড়ছেন —
এই প্রজেক্টে বিনিয়োগ না করে টাকাটা অন্তত ইনফ্লেশনের সাথে তাল মিলিয়ে বাড়ে এমন কোথাও রাখাই ভালো হতো।
প্র ০২ ব্রেকইভেন কোডে যদি SP ও VC একই হারে (উভয়ই ৫%) ইনফ্লেট হতো, তাহলে বছরের সাথে ব্রেকইভেন কোয়ান্টিটি কী রকম আচরণ করত?
মার্জিন $(SP-VC)$ সময়ের সাথে একই অনুপাতে বাড়ত (কারণ দুটোই একই হারে স্কেল করছে), তাই ব্রেকইভেন কোয়ান্টিটি $FC/(SP-VC)$ সময়ের সাথে ধীরে ধীরে কমত (FC নমিনালে স্থির ধরায়, হর বাড়ছে) — কিন্তু "শিফট" এর কারণ তখন আর মার্জিন-সংকোচন থাকত না, বরং শুধু সামগ্রিক নমিনাল বৃদ্ধি। ডিফারেনশিয়াল ইনফ্লেশনের আসল গুরুত্ব তখনই বোঝা যায় যখন SP ও VC ভিন্ন হারে বাড়ে।
প্র ০৩
উপরের IRR কোডে find_irr() ফাংশনটি কীভাবে নিশ্চিত করে যে এটি একটি "মুখস্থ" সংখ্যা প্রিন্ট করছে না, বরং সত্যিই খুঁজে বের করছে?
কোডটি প্রতিটি ইটারেশনে npv() ফাংশন দিয়ে প্রকৃত NPV হিসাব করে, তারপর সাইন-পরিবর্তনের ভিত্তিতে
lo/hi রেঞ্জ সংকুচিত করে — এটি ক্লাসিক বিসেকশন অ্যালগরিদম। শেষে
converged_npv প্রিন্ট করে দেখানো হয় যে খুঁজে পাওয়া রেটে NPV প্রায় শূন্য — যদি IRR ভুল হতো
(মুখস্থ করা বা ভুল হিসাবে করা), converged NPV শূন্যের ধারেকাছেও থাকত না।
অনুশীলন
-
চিন্তা করুন: একটি কোম্পানির ম্যানেজার বলছেন "আমাদের প্রজেক্টের ২০% রিটার্ন আছে, এটা তো
দারুণ!" — কিন্তু দেশে বর্তমানে বার্ষিক ইনফ্লেশন ১৫%। এই দাবিটি মূল্যায়ন করতে আপনি আর কী প্রশ্ন করবেন?
প্রথম প্রশ্ন — এই ২০% কি নমিনাল (actual-dollar) নাকি রিয়েল রিটার্ন? যদি নমিনাল হয়, তাহলে
real_rate(0.20, 0.15) = (0.20-0.15)/1.15 ≈ 0.0435— প্রকৃত রিয়েল রিটার্ন মাত্র প্রায় ৪.৩৫%, যা প্রথমে শোনা "২০%"-এর তুলনায় অনেক কম আকর্ষণীয়। ২০% আসলে চিত্তাকর্ষক শোনানোর একটি বড় কারণ হতে পারে শুধু উচ্চ ইনফ্লেশন, প্রকৃত অতিরিক্ত মূল্য তৈরি নয়। -
পরীক্ষা করুন: ব্রেকইভেন কোড সেলে
vc_inflation = 0.07-কেvc_inflation = 0.03-এ বদলে (SP ইনফ্লেশন ৩%-ই রেখে, অর্থাৎ দুটো এখন সমান) Run চেপে দেখুন ব্রেকইভেন কোয়ান্টিটি বছরের সাথে বাড়ে, কমে, নাকি অপরিবর্তিত থাকে।দুটো একই হারে (৩%) ইনফ্লেট হলে মার্জিন $(SP-VC)$ প্রতি বছর ঠিক একই অনুপাতে (১.০৩ গুণ) বাড়ে, ফলে ব্রেকইভেন কোয়ান্টিটি
FC/marginধীরে ধীরে কমে (যেহেতু FC নমিনালে স্থির রাখা হয়েছে, শুধু হর বাড়ছে) — কিন্তু আর কোনো "মার্জিন-সংকোচন" প্রভাব নেই, কারণ SP ও VC এখন একই হারে বাড়ছে।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ টাইম ভ্যালু অফ মানি, ক্যাশ ফ্লো সিরিজ, ওয়ার্থ-ভিত্তিক তুলনা, রেট অফ রিটার্ন, ডেপ্রিসিয়েশন, ট্যাক্স, ইনফ্লেশন, রিস্ক অ্যানালাইসিস ও ক্যাপিটাল বাজেটিং — সব ৫৭টি পাঠ।
- Discrete Mathematics কোর্স সহোদর কোর্স বিসেকশন রুট-ফাইন্ডিং একটি সাধারণ সংখ্যাসূচক পদ্ধতি — এখানে 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 — সব এক জায়গায়।