كيفية بناء نموذج أساسي للتدفق النقدي من Python للحصول على قرض

نشرت: 2022-03-11

العديد من الخبراء الماليين بارعون في استخدام برنامج Excel لبناء نماذج مالية. ومع ذلك ، نظرًا للصعوبات المتعلقة بمراجعة الأقران والتحكم في الإصدار وعدم القدرة على تكوين وظائف تكرارية ، فقد لا يكون Excel هو الخيار الأفضل للنماذج الأكثر تعقيدًا. على الرغم من هذه العيوب ، لا يزال العديد من المتخصصين الماليين يستخدمون Excel لأنهم أقل ثقة في لغات البرمجة مثل Python.

Python هي واحدة من أسهل لغات البرمجة للتعلم. نظرًا لأنه تم تصميمه مع مراعاة سهولة القراءة وسهولة الاستخدام ، فإن الكود الخاص به موجز وقريب من اللغة الإنجليزية البسيطة. في هذه المقالة ، أوضح مدى سهولة إنشاء نموذج التدفق النقدي Python لسداد القروض باستخدام أبسط الوظائف والحزم وهياكل البيانات.

للمتابعة ، ستحتاج إلى استخدام Colaboratory (اختصارًا "Colab") ، وهو تطبيق كمبيوتر محمول مجاني على شبكة الإنترنت من Google يتيح لك كتابة التعليمات البرمجية وتنفيذها. Colab هو مترجم Python الذي يستخدم الخلايا التي يمكن أن تحتوي على تعليمات برمجية أو Markdown (للنص ذي النمط السهل) أو الصور أو البيانات الأخرى. يقوم Colab باستمرار بتخزين قيم التعليمات البرمجية الخاصة بك أثناء الكتابة ، مما يجعل من السهل والسريع اكتشاف الأخطاء أو الأخطاء عند ظهورها. (إذا كنت لا ترغب في الدخول الآن ، فاتبع هذا المثال دفتر ملاحظات Colab.)

أولاً ، تأكد من حصولك على الأدوات التي تحتاجها

سنقوم ببناء نموذج للقرض المطفأ ذي السداد الدوري المجدول المطبق على كل من أصل القرض والفائدة. لديها قسط ثابت لكل فترة وجزء الفائدة من المدفوعات يتناقص بمرور الوقت. ستحتاج إلى ثلاث مكتبات Python ، ومجموعات من إجراءات البرامج التي تمنع المطورين من الاضطرار إلى كتابة تعليمات برمجية من البداية ، لهذا النموذج — NumPy و Pandas و Matplotlib:

  • numpy-financial==1.0.0
  • pandas==1.2.3
  • matplotlib==3.2.2

في Colab ، يتم تثبيت حزم Pandas و Matplotlib افتراضيًا ، لذلك ما عليك سوى تثبيت المكتبة المالية المعقدة ، وهو ما يمكنك القيام به مباشرة من Colab. لتثبيت numpy-Financial ، واستيراد جميع المكتبات الثلاث التي ستحتاج إليها لاحقًا ، افتح دفتر ملاحظات Colab جديدًا من قائمة File ، والصق ما يلي في خلية التعليمات البرمجية الأولى:

 # initial set-up !pip install numpy_financial import pandas as pd import numpy_financial as npf import matplotlib.pyplot as plt from collections import namedtuple

قبل أن ننتقل إلى الخطوة التالية ، اسمحوا لي أن أشرح الكود السابق وسبب كتابته بالطريقة التي كتب بها. على الرغم من أن اسم numpy-Financial يحتوي على واصلة ، يجب عليك استخدام شرطة سفلية في الاسم عند تثبيته واستيراده. (لمزيد من المعلومات والشرح حول تثبيت numpy_financial ، راجع الوثائق.) قد تلاحظ الاختصارات أيضًا. تُستخدم الأسماء المستعارة المعرفة مسبقًا بشكل شائع للحزم — تتم كتابة NumPy كـ np و Pandas كـ pd. تُستخدم هذه الأسماء المستعارة لحمايتك من كتابة الاسم الكامل للحزمة في كل مرة ترغب في استخدامها وتساعد أيضًا في جعل الرمز الخاص بك أكثر قابلية للقراءة.

الآن ، استخدم NumPy لإعداد خصائص القرض

تعد NumPy واحدة من مكتبات Python الأكثر شيوعًا التي تضيف دعمًا للمصفوفات الكبيرة متعددة الأبعاد ، جنبًا إلى جنب مع مجموعة كبيرة من الوظائف الرياضية عالية المستوى للعمل على تلك المصفوفات. تعد مكتبة Numpy-Financial حزمة جديدة نسبيًا تتكون من مجموعة من الوظائف المالية شائعة الاستخدام والتي تم فصلها عن مكتبة NumPy الرئيسية ومنحت مكانتها الخاصة.

إن أبسط طريقة لحساب الفائدة المجدولة والمتجهات الرئيسية لحياة قرضنا المستهلك هي استخدام وظائف PMT و IPMT و PPMT من الحزمة المالية غير المتداولة. توفر وظيفة PMT قسط القرض الثابت لسداد القرض بالكامل على مدى عدد معين من الفترات. توفر وظيفتا IPMT و PPMT الفوائد ومدفوعات رأس المال ، على التوالي. اعتمادًا على إدخال الفترة ، يمكن أن تُرجع وظائف IPMT و PPMT قيمًا لفترة واحدة أو عددًا من الفترات.

في هذا المثال ، سنوفر نطاقًا مع العمر الكامل للقرض كمدخل الفترة. على هذا النحو ، سوف نحصل على مصفوفات متجهة مع الفائدة على المدفوعات الأساسية لكل فترة من عمر القرض:

 # loan characteristics original_balance = 500_000 coupon = 0.08 term = 120 # payments periods = range(1, term+1) interest_payment = npf.ipmt( rate=coupon / 12, per=periods, nper=term, pv=-original_balance) principal_payment = npf.ppmt( rate=coupon / 12, per=periods, nper=term, pv=-original_balance)

لن "ترى" أي شيء يحدث في ملف Colab الخاص بك بعد إدخال الرمز - إنها معلومات القرض الأساسية اللازمة للقيام ببقية هذا التمرين. (يمكن العثور على قائمة بجميع الوظائف المالية المعقدة التي استخدمتها وتعريفاتها ومدخلاتها في الوثائق الرسمية.)

بعد ذلك ، استخدم Matplotlib لإنشاء مخطط

في حين أنه من الجيد أن يكون لديك المتجهات كإخراج ، فقد يكون من الأفضل تصور الإخراج في شكل مخطط ، على وجه التحديد كمخطط مكدس. لإعداد المخطط ، سنستخدم plt ، الاسم المستعار لمجموعة وظائف pyplot من مكتبة matplotlib. في مثالنا ، سنضيف وسيلة إيضاح في الزاوية اليسرى العليا ونضيف عناوين إلى المحور x والمحور y. نظرًا لأننا لا نريد حدًا داخليًا ، فقد قمنا بتعيين الهوامش على 0.

أضف خلية تعليمات برمجية أخرى ، وأدخل الكود التالي:

 plt.stackplot(periods, interest_payment, principal_payment, labels=['Interest', 'Principal']) plt.legend(loc='upper left') plt.xlabel("Period") plt.ylabel("Payment") plt.margins(0, 0) 

كما نرى ، تقل الفائدة بمرور الوقت. ينخفض ​​رصيد القرض أيضًا بسبب المدفوعات الأساسية في كل فترة. للحفاظ على القسط الثابت ، يجب زيادة الجزء الرئيسي.

أخيرًا ، استخدم الباندا لإنشاء جدول

حزمة Pandas هي حزمة Python الأكثر استخدامًا لمعالجة الجداول العددية والسلاسل الزمنية. يوفر هياكل بيانات سريعة ومرنة ومعبرة مصممة لجعل العمل مع البيانات العلائقية أو المصنفة سهلاً وبديهيًا. سننشئ جدولاً يتضمن مدفوعات رأس المال والفائدة ، بالإضافة إلى أرصدة بداية ونهاية القرض لكل فترة:

 _# pandas float formatting_ pd.options.display.float_format = '{:,.2f}'.format _# cash flow table_ cf_data = {'Interest': interest_payment, 'Principal': principal_payment} cf_table = pd.DataFrame(data=cf_data, index=periods) cf_table['Payment'] = cf_table['Interest'] + cf_table['Principal'] cf_table['Ending Balance'] = original_balance - \ cf_table['Principal'].cumsum() cf_table['Beginning Balance'] = [original_balance] + \ list(cf_table['Ending Balance'])[:-1] cf_table = cf_table[['Beginning Balance', 'Payment', 'Interest', 'Principal', 'Ending Balance']] cf_table.head(8)

يطبق السطر الأول من التعليمات البرمجية قواعد تنسيق العرض لجعل الجدول أكثر قابلية للقراءة عن طريق إضافة ألف فاصل وعرض الأرقام على منزلتين عشريتين فقط.

الجزء الثاني من الكود يوجه كولاب إلى تضمين مدفوعات الفائدة ، والدفع الأساسي ، والرصيد الختامي ، والرصيد الأصلي لكل فترة قرض. تعمل الخطوط المائلة العكسية كفواصل أسطر لأنه لا يمكن أن يكون لدينا أكثر من 79 حرفًا في سطر واحد.

تم اختصار المبالغ الظاهرة في الرسم البياني إلى منزلتين عشريتين.

إذا كنت تتابع في دفتر Colab الخاص بك ، فتهانينا! لقد قمت الآن بترميز ملف تعريف محفظة قرض إطفاء بسيط مجدول باستخدام Python.

هناك الكثير الذي يمكنك القيام به مع Python للتمويل ، بما في ذلك نمذجة القروض مع قسائم الفائدة المتغيرة المرتبطة بالسعر القياسي وهياكل القروض الأخرى. نأمل أن يكون نموذج القرض هذا قد أعطاك لمحة عن مدى بساطة الترميز المالي في بايثون.