ডিফার্ড অ্যানুইটি ও অনিয়মিত ক্যাশ ফ্লো
এই পাঠে যা শিখবেন
- ডিফার্ড অ্যানুইটি কী এবং কেন এটি সরাসরি P/A সূত্র দিয়ে t=0-তে হিসাব করা যায় না
- দুই-ধাপ পদ্ধতি — P/A দিয়ে "এক পিরিয়ড আগে" মূল্য, তারপর P/F দিয়ে t=0-তে আনা
- একটি জেনেরিক
npv(cashflows, i)ফাংশন লেখা যা যেকোনো (amount, year) তালিকার প্রেজেন্ট ওয়ার্থ বের করে - দুই-ধাপ পদ্ধতি ও জেনেরিক npv() পদ্ধতি একে অপরের সাথে ক্রস-চেক করা
১ · ডিফার্ড অ্যানুইটি কী
এখন পর্যন্ত M3-এ দেখা সব অ্যানুইটির প্রথম পেমেন্ট বছর ১-এর শেষে ঘটেছে। কিন্তু বাস্তবে অনেক সময় পেমেন্ট দেরিতে শুরু হয় — যেমন একটি লোনের গ্রেস পিরিয়ড শেষে কিস্তি শুরু হওয়া, বা একটি বিনিয়োগ প্রকল্পের প্রথম কয়েক বছর নির্মাণ পর্যায়ে কোনো রিটার্ন না আসা। এমন সিরিজকে ডিফার্ড অ্যানুইটিDeferred Annuityযে অ্যানুইটির প্রথম পেমেন্ট বছর ১-এর শেষে না হয়ে তার পরে কোনো এক সময়ে শুরু হয়। বলা হয়। মূল সমস্যা: P/A সূত্র সরাসরি প্রয়োগ করলে যে "P" পাওয়া যায়, তা t=0-তে নয় — বরং প্রথম পেমেন্টের ঠিক এক পিরিয়ড আগের সময়-বিন্দুতে।
যদি প্রথম পেমেন্ট বছর $k+1$-এ শুরু হয়ে মোট $n$টি পেমেন্ট চলে, তাহলে —
ধাপ ১: $$P_k = A \cdot (P/A, i, n)$$ — এই $P_k$ আসলে বছর $k$-এ (প্রথম পেমেন্টের ঠিক এক পিরিয়ড আগে) মূল্য, কারণ P/A সূত্রই সবসময় "প্রথম পেমেন্টের এক পিরিয়ড আগের" সময়-বিন্দুতে মূল্য দেয়।
ধাপ ২: $$P_0 = P_k \cdot (P/F, i, k)$$ — এই $P_k$-কে সাধারণ সিঙ্গেল-পেমেন্ট P/F ফ্যাক্টর দিয়ে আরও $k$ পিরিয়ড পেছনে t=0-তে নিয়ে আসা হয়।
২ · অনিয়মিত ক্যাশ ফ্লো ও জেনেরিক npv()
যখন ক্যাশ ফ্লো সম্পূর্ণ অনিয়মিত (প্রতি বছর ভিন্ন ভিন্ন অ্যামাউন্ট, কোনো uniform/gradient প্যাটার্ন নেই), তখন কোনো বন্ধ-আকারের ফ্যাক্টর কাজ করে না। তখন সবচেয়ে সাধারণ ও নির্ভরযোগ্য পদ্ধতি — প্রতিটি বছরের ক্যাশ ফ্লোকে আলাদাভাবে $P/F$ দিয়ে ডিসকাউন্ট করে যোগ করা:
$$NPV = \sum_{t} \frac{CF_t}{(1+i)^t}$$
লক্ষ্য করুন — একটি ডিফার্ড অ্যানুইটিও শেষমেশ একগুচ্ছ (amount, year) জোড়া মাত্র, তাই একই জেনেরিক
npv() ফাংশন দিয়ে ডিফার্ড অ্যানুইটি ও অনিয়মিত ক্যাশ ফ্লো — দুটোই সমাধান করা যায়।
# ডিফার্ড অ্যানুইটি (দুই-ধাপ) ও জেনেরিক npv() -- অনিয়মিত ক্যাশ ফ্লো
def pa_factor(i, n):
return ((1 + i) ** n - 1) / (i * (1 + i) ** n)
def pf_factor(i, n):
return 1 / (1 + i) ** n
def npv(cashflows, i):
# cashflows: (amount, year) জোড়ার তালিকা -- প্রতিটি আলাদাভাবে P/F দিয়ে ডিসকাউন্ট করে যোগ করা
return sum(amount * pf_factor(i, year) for amount, year in cashflows)
# --- ডিফার্ড অ্যানুইটি: A=$1500/year, ৬টি পেমেন্ট, প্রথম পেমেন্ট বছর ৪-এ, i=7% ---
A = 1500
i = 0.07
n_payments = 6
first_payment_year = 4
k = first_payment_year - 1 # = 3 -- P/A সূত্র বছর k-তেই মূল্য দেয় (প্রথম পেমেন্টের এক পিরিয়ড আগে)
# পদ্ধতি ১: দুই-ধাপ
P_at_k = A * pa_factor(i, n_payments)
P_deferred_two_step = P_at_k * pf_factor(i, k)
# পদ্ধতি ২: npv() দিয়ে প্রতিটি পেমেন্ট আলাদাভাবে
deferred_cashflows = [(A, first_payment_year + t) for t in range(n_payments)]
P_deferred_npv = npv(deferred_cashflows, i)
print("--- ডিফার্ড অ্যানুইটি ---")
print(f"A=${A:,.2f}/year, {n_payments} পেমেন্ট, প্রথম পেমেন্ট বছর {first_payment_year}, i={i*100:.0f}%")
print(f"পেমেন্টের বছর: {[y for _, y in deferred_cashflows]}")
print(f"P_at_k (k={k}) = ${P_at_k:,.2f}")
print(f"পদ্ধতি ১ (two-step P/A -> P/F): P0 = ${P_deferred_two_step:,.2f}")
print(f"পদ্ধতি ২ (npv সরাসরি): P0 = ${P_deferred_npv:,.2f}")
assert abs(P_deferred_two_step - P_deferred_npv) < 1e-6
# --- সম্পূর্ণ অনিয়মিত ক্যাশ ফ্লো ---
irregular_cashflows = [(-8000, 0), (1000, 1), (1500, 2), (2200, 3), (3000, 4), (4000, 5)]
P_irregular = npv(irregular_cashflows, i)
print("\n--- অনিয়মিত ক্যাশ ফ্লো ---")
print(f"cashflows (amount, year) = {irregular_cashflows}")
print(f"i = {i*100:.0f}%")
print(f"NPV = ${P_irregular:,.2f}")
print("\nচেক পাস -- ডিফার্ড অ্যানুইটির দুই-ধাপ পদ্ধতি ও জেনেরিক npv() হুবহু একই ফলাফল দিয়েছে।")
npv() ফাংশনটি লক্ষ্য করুন — এটি জানে না ক্যাশ ফ্লোগুলো একটি অ্যানুইটি নাকি সম্পূর্ণ অনিয়মিত। এটি
শুধু একটি (amount, year) তালিকা নেয় এবং প্রতিটি আলাদাভাবে ডিসকাউন্ট করে যোগ করে — এই "জেনেরিক" ডিজাইনের কারণেই
এটি দুই ভিন্ন ধরনের সমস্যা সমাধান করতে পেরেছে একই কোড দিয়ে।
যেকোনো জটিল ক্যাশ ফ্লো প্যাটার্ন — যতই অনিয়মিত বা দেরিতে শুরু হোক — শেষ পর্যন্ত মূল সিঙ্গেল-পেমেন্ট P/F সূত্রে ফিরে যায়। বন্ধ-আকারের ফ্যাক্টরগুলো (P/A, P/G, ইত্যাদি) শুধু নিয়মিত প্যাটার্নের জন্য শর্টকাট — যখন প্যাটার্ন ভাঙে, তখন মূল সংজ্ঞায় (npv-স্টাইল সামেশন) ফিরে যাওয়াই সবচেয়ে নির্ভরযোগ্য। পরের পাঠে দেখা যাবে পেমেন্ট পিরিয়ড ও কম্পাউন্ডিং পিরিয়ড ভিন্ন হলে কীভাবে হিসাব করতে হয়।
ভাবনার প্রশ্ন
প্রতিটি প্রশ্ন নিজে কিছুক্ষণ ভাবুন — তারপর "→ উত্তর" চাপুন।
প্র ০১ দুই-ধাপ পদ্ধতিতে ধাপ ১-এ পাওয়া P কেন সরাসরি "P at t=0" নয়?
কারণ P/A সূত্রের সংজ্ঞাই এমন — এটি সবসময় "প্রথম পেমেন্টের ঠিক এক পিরিয়ড আগের" সময়-বিন্দুতে মূল্য দেয়, কারণ সূত্রটি ধরে নেয় প্রথম পেমেন্ট এই সময়-বিন্দুর এক পিরিয়ড পরে ঘটবে। যদি প্রথম পেমেন্ট বছর ৪-এ হয়, P/A বছর ৩-এ মূল্য দেবে (বছর ০-এ নয়) — তাই দ্বিতীয় ধাপে P/F দিয়ে আরও পেছনে t=0-তে আনতে হয়।
প্র ০২ npv() ফাংশনে ঋণাত্মক (negative) amount ব্যবহার করার মানে কী?
ঋণাত্মক amount মানে সেই বছরে টাকা বের হচ্ছে (খরচ বা বিনিয়োগ), ধনাত্মক মানে টাকা আসছে (রাজস্ব বা সুবিধা)।
উপরের অনিয়মিত উদাহরণে বছর ০-এ -8000 মানে প্রাথমিক বিনিয়োগ, আর পরের বছরগুলোর ধনাত্মক মান
মানে ধীরে ধীরে সেই বিনিয়োগ থেকে রিটার্ন আসছে। NPV ধনাত্মক হওয়া মানে মোট রিটার্ন বিনিয়োগের চেয়ে (ডিসকাউন্ট
করার পরও) বেশি।
প্র ০৩ যদি একটি অ্যানুইটির প্রথম পেমেন্ট বছর ১-এই হয় (deferred নয়), তাহলে k-এর মান কত হবে, এবং দুই-ধাপ পদ্ধতি স্বাভাবিক P/A-তে কীভাবে পরিণত হয়?
তখন first_payment_year = 1, তাই k = first_payment_year - 1 = 0। ধাপ ২-এ
$P/F(i, 0) = 1/(1+i)^0 = 1$, অর্থাৎ P_k-কে কোনো পরিবর্তন ছাড়াই সরাসরি P0 হিসেবে ব্যবহার করা
হয় — যা ঠিক স্বাভাবিক (non-deferred) P/A সূত্রের সমান। এটাই দেখায় দুই-ধাপ পদ্ধতি আসলে সাধারণ P/A-এর একটি
সাধারণীকরণ (generalization)।
অনুশীলন
-
চিন্তা করুন: একটি স্কলারশিপ ফান্ড আজ তৈরি করা হচ্ছে, কিন্তু প্রথম বৃত্তির পেমেন্ট ৫ বছর পর
শুরু হবে এবং তারপর প্রতি বছর চলবে। কেন এই সমস্যাটি একটি ডিফার্ড অ্যানুইটি, এবং সরাসরি স্বাভাবিক P/A প্রয়োগ
করলে কী ভুল হবে?
এটি ডিফার্ড অ্যানুইটি কারণ প্রথম পেমেন্ট বছর ১-এ নয়, বরং বছর ৫ (বা যেখান থেকে শুরু হয়) থেকে শুরু হচ্ছে। সরাসরি স্বাভাবিক P/A প্রয়োগ করলে যে P পাওয়া যাবে, সেটা আসলে প্রথম পেমেন্টের এক পিরিয়ড আগের সময়-বিন্দুর মূল্য — সেটাকে ভুলভাবে আজকের (t=0) মূল্য ধরলে ফান্ডের প্রয়োজনীয় পরিমাণ বাস্তবের চেয়ে অনেক বেশি হিসাব হয়ে যাবে (কারণ ডিসকাউন্টিং-এর একটি ধাপ বাদ পড়ে যাবে)।
-
পরীক্ষা করুন: উপরের কোড সেলে
first_payment_year = 4-কেfirst_payment_year = 1-এ বদলে Run চেপে দেখুনk-এর মান কী হয় এবং P0 কীভাবে বদলায়।first_payment_year = 1হলেk = 0, তাইpf_factor(i, 0) = 1— অর্থাৎP_deferred_two_stepঠিকP_at_k-এর সমান হয়ে যাবে, যা স্বাভাবিক (অ-ডিফার্ড) P/A ফলাফল। P0 আগের ($4-বছর-দেরি) উদাহরণের চেয়ে অনেক বড় হবে, কারণ পেমেন্টগুলো এখন অনেক আগে শুরু হচ্ছে এবং কম ডিসকাউন্ট হচ্ছে।
আরও পড়ুন · ABCL TECH-এ আপনার পরবর্তী পদক্ষেপ
- কোর্সের সম্পূর্ণ সিলেবাস দেখুন ৫৭টি পাঠ টাইম ভ্যালু অফ মানি, ক্যাশ ফ্লো সিরিজ, ওয়ার্থ-ভিত্তিক তুলনা, রেট অফ রিটার্ন, ডেপ্রিসিয়েশন, ট্যাক্স, ইনফ্লেশন, রিস্ক অ্যানালাইসিস ও ক্যাপিটাল বাজেটিং — সম্পূর্ণ কোর্স এক জায়গায়।
- Discrete Mathematics কোর্স সহোদর কোর্স সিরিজের সমষ্টি ও সাধারণীকরণ — npv()-এর মতো জেনেরিক সামেশন-ভিত্তিক পদ্ধতির গাণিতিক ভিত্তি সেখানেই তৈরি হয়েছে।
- সব 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 — সব এক জায়গায়।