পাইথন এবং ফিনান্স - আপনার স্প্রেডশীটগুলিকে শক্তিশালী করুন

নির্বাহী সারাংশ

<বিস্তারিত> <সারাংশ>ফাইনান্স পেশাদারদের শেখার জন্য পাইথন একটি দুর্দান্ত প্রোগ্রামিং ভাষা কেন?
  • পাইথন একটি উচ্চ-স্তরের প্রোগ্রামিং ভাষা, যার অর্থ এটি বিমূর্ত করে এবং প্রোগ্রামিংয়ের অনেক প্রযুক্তিগত দিক পরিচালনা করে, যেমন মেমরি ব্যবস্থাপনা, যা অবশ্যই অন্যান্য ভাষায় স্পষ্টভাবে পরিচালনা করা উচিত। এটি প্রযুক্তিগত ব্যাকগ্রাউন্ড ছাড়া পাইথনকে ব্যবহার করা সহজ করে তোলে।
  • যেহেতু ভাষাটি পঠনযোগ্যতা এবং সহজে-ব্যবহারের কথা মাথায় রেখে ডিজাইন করা হয়েছে, এটি শেখার সহজতম ভাষাগুলির মধ্যে একটি। পাইথন কোড সংক্ষিপ্ত এবং সাধারণ ইংরেজির কাছাকাছি।
  • পাইথন প্রোটোটাইপিং এবং দ্রুত, পুনরাবৃত্তিমূলক বিকাশের জন্য আদর্শ। এর ইন্টারেক্টিভ ইন্টারপ্রেটার টুলগুলি এমন পরিবেশ প্রদান করে যেখানে আপনি কোডের প্রতিটি লাইন বিচ্ছিন্নভাবে লিখতে এবং কার্যকর করতে পারেন এবং ফলাফলগুলি অবিলম্বে দেখতে পারেন৷
  • একই সময়ে, পাইথন শক্তিশালী এবং পারফরম্যান্ট, এটি মূল সিস্টেম এবং বৃহত্তর অ্যাপ্লিকেশনগুলির জন্য একটি কার্যকর পছন্দ করে তোলে।
  • উপযোগী টুলের বৃহৎ স্ট্যান্ডার্ড লাইব্রেরি ছাড়াও, পাইথনের আর্থিক বিশ্লেষণ এবং কম্পিউটিংয়ের জন্য দুর্দান্ত তৃতীয় পক্ষের লাইব্রেরি রয়েছে, যেমন এই টিউটোরিয়ালে ব্যবহৃত পান্ডাস এবং নমপি লাইব্রেরি।
<বিস্তারিত> <সারাংশ>পাইথন এবং ফিনান্স একত্রে বাস্তবায়নের জন্য কিছু ব্যবহারের ক্ষেত্রে কী কী?
  • পাইথন স্ক্রিপ্টগুলি পুনরাবৃত্তিমূলক কাজ এবং কর্মপ্রবাহ স্বয়ংক্রিয় করতে, সময় বাঁচাতে এবং ম্যানুয়াল ত্রুটির ঝুঁকি কমাতে ব্যবহার করা যেতে পারে৷
  • স্ক্রিপ্টগুলি ব্যবহারকারীদের সহজেই স্প্রেডশীট, ডাটাবেস এবং API থেকে ডেটা টেনে আনতে বা এমনকি ওয়েব ডেটা স্ক্র্যাপ করতে দেয়, যা পরে শক্তিশালী পরিসংখ্যানগত এবং বিশ্লেষণাত্মক সরঞ্জাম ব্যবহার করে প্রক্রিয়া করা এবং বিশ্লেষণ করা যেতে পারে।
  • এক্সেলের জন্য বিভিন্ন প্লাগইন ব্যবহারকারীদের আপনার স্প্রেডশীট এবং পাইথন কোডের মধ্যে রিয়েল-টাইম দ্বিমুখী লিঙ্ক তৈরি করতে দেয়।
  • পাইথন নতুন ধরনের বিশ্লেষণ সক্ষম করে, যেমন মন্টে কার্লো সিমুলেশন, যা সহজে সাধারণ স্প্রেডশীটে পাওয়া যায় না।
  • অ্যালগরিদমিক ট্রেডিং আর হেজ ফান্ড এবং বড় বিনিয়োগ ব্যাঙ্কের একচেটিয়া ডোমেইন নয়। পাইথনের সাথে, আপনি স্বল্প সময়ে এবং স্বল্প খরচে আপনার নিজস্ব ট্রেডিং কৌশলগুলি বিকাশ, ব্যাকটেস্ট এবং স্থাপন করতে পারেন৷

স্প্রেডশীটগুলির মাধ্যমে ট্রলিংয়ের উপর দীর্ঘকাল ধরে নির্ভরশীল পেশাগুলির জন্য, পাইথন বিশেষভাবে মূল্যবান। সিটিগ্রুপ, একটি আমেরিকান ব্যাংক, তার প্রশিক্ষণার্থী বিশ্লেষকদের জন্য পাইথনে একটি ক্র্যাশ কোর্স চালু করেছে। - দ্য ইকোনমিস্ট

কাস্টম কার্যকারিতা তৈরি করতে এবং ওয়ার্কফ্লোগুলি স্বয়ংক্রিয় করতে ফাইন্যান্স পেশাদারদের দীর্ঘকাল ধরে এক্সেলে VBA (অ্যাপ্লিকেশনের জন্য ভিজ্যুয়াল বেসিক) অ্যাক্সেস রয়েছে। সাম্প্রতিক বছরগুলিতে স্প্রেডশীট স্পেসে একটি গুরুতর প্রতিযোগী হিসাবে Google পত্রকগুলির উত্থানের সাথে, Google Apps স্ক্রিপ্ট এখন একটি অতিরিক্ত পছন্দ অফার করে৷

যাইহোক, আমি একটি তৃতীয় বিকল্পের দিকে দৃষ্টি আকর্ষণ করতে চাই, পাইথন প্রোগ্রামিং ল্যাঙ্গুয়েজ, যেটি বেশ কয়েকটি ক্ষেত্রে অত্যন্ত জনপ্রিয় হয়ে উঠেছে।

এই নিবন্ধে, আমি পাইথন দিয়ে আপনি কী করতে পারেন তার কিছু উদাহরণ দিব, ভাষার একটি ওভারভিউ দিয়ে শুরু করে এবং কেন এটি ওয়েব ডেভেলপমেন্ট, মেশিন লার্নিং, ফাইন্যান্স, জুড়ে বিস্তৃত বিভিন্ন ক্ষেত্রে এত জনপ্রিয় হয়ে উঠেছে। বিজ্ঞান, এবং শিক্ষা, শুধুমাত্র কিছু নাম. দ্বিতীয়ার্ধে একটি ধাপে ধাপে টিউটোরিয়াল থাকবে।

আমার এই লেখার উদ্দেশ্য হল পাইথনকে আপনার আর্থিক টুলবক্সে যোগ করার বিষয়টি বিবেচনা করার জন্য আপনার পক্ষে যথেষ্ট কৌতূহলী দেখায় কিনা তা নির্ধারণে আপনাকে সাহায্য করা। আপনি যদি লাফ দেন, ভাষা শেখার জন্য অনেক অ্যাপ, কোর্স, ভিডিও, নিবন্ধ, বই এবং ব্লগ পোস্ট পাওয়া যায়। অংশের শেষে, আমি কিছু সংস্থান তালিকাভুক্ত করেছি যা আমাকে পথ চলতে সাহায্য করেছে।

ব্যবহারের ক্ষেত্রে:আমি কিসের জন্য পাইথন ব্যবহার করেছি তার উদাহরণ

1980-এর দশকের মাঝামাঝি সময়ে একটি ওরিক 1-এ বেসিক শেখা ছিল প্রোগ্রামিংয়ের সাথে আমার পরিচয়। তখন বেসিক ছিল সবচেয়ে সাধারণ শিক্ষানবিসদের ভাষা। 80-এর দশকের শেষের দিকে 90-এর দশকের মাঝামাঝি পর্যন্ত আমি যে অন্যান্য ভাষাগুলির সাথে ড্যাবল করেছি সেগুলি হল প্যাসকেল এবং সি, কিন্তু আমি সেগুলি কখনই কোনও পেশাদার ক্ষমতায় ব্যবহার করিনি এবং আমি প্রোগ্রামিং দক্ষতার প্রয়োজন বা ব্যবহার করার আশা করিনি। 90 এর দশকের শেষের দিকে আমার জানামতে, ফিনান্স এবং প্রোগ্রামিং খুব আলাদা ক্ষেত্র ছিল, যখন আমি ফিনান্সে ক্যারিয়ারের পথ বেছে নিয়েছিলাম।

দ্রুত এগিয়ে 2012, এবং আমি একটি শখ হিসাবে প্রোগ্রামিং ব্যাক আপ নিতে খুঁজছি, তাই আমি সেই সময়ে উপলব্ধ ভাষা গবেষণা শুরু. দেখা গেল বেশ কিছুটা ঘটেছে, এবং যখন আমি পাইথন জুড়ে আসি তখন আমি আঁকড়ে পড়েছিলাম, অনেক কারণের জন্য যা আমি পরবর্তী বিভাগে রূপরেখা করব। তারপর থেকে আমি ব্যক্তিগতভাবে এবং পেশাগতভাবে ছোট স্ক্রিপ্ট থেকে বড় প্রকল্প পর্যন্ত বিস্তৃত কাজের জন্য পাইথন ব্যবহার করেছি। অনেকেরই, কিন্তু সবাই নয়, স্প্রেডশীট জড়িত আছে, যা অনেক ফিনান্স পেশাদারের ওয়ার্কবেঞ্চ।

স্প্রেডশীট এবং পাইথন একসাথে কতটা ভালোভাবে চলতে পারে তার কয়েকটি উদাহরণ এখানে দেওয়া হল:

1. একটি M&A ইন্টিগ্রেশন PMO সেটআপে সময়ের সাথে সাথে শত শত ক্রিয়াকলাপ ট্র্যাক করা

আমি M&A লেনদেনের সমস্ত দিক নিয়ে কাজ করি, শুধু সম্পাদন নয়, ইন্টিগ্রেশনও। সাম্প্রতিক একটি ক্ষেত্রে, PMO টিম একটি হাইব্রিড প্রোগ্রাম এবং প্রজেক্ট ম্যানেজমেন্ট পদ্ধতির সিদ্ধান্ত নিয়েছে, জলপ্রপাত পরিকল্পনা এবং গ্যান্ট চার্ট ব্যবহার করে বারোটি ইন্টিগ্রেশন ওয়ার্কস্ট্রিমের প্রতিটির জন্য উচ্চ-স্তরের পরিকল্পনার জন্য, একটি কানবান বোর্ড ছাড়াও চলছে শত শত কার্যকলাপের উপর নজর রাখার জন্য। যেকোনো নির্দিষ্ট সময়ে, প্রথম 100-দিনের পরিকল্পনায় এবং তার পরেও। কানবান টুলটি যেটি বেছে নেওয়া হয়েছিল, MeisterTask, এর অনেকগুলি পরিসংখ্যানগত এবং রিপোর্টিং বৈশিষ্ট্য রয়েছে, কিন্তু আমাদের চাহিদাগুলি বিশ্লেষণ এবং উপস্থাপনার ক্ষেত্রে এর বাইরে চলে গেছে, যার জন্য একটি কাস্টম সমাধান প্রয়োজন। এটি হল ওয়ার্কফ্লো যা আমি পাইথন ব্যবহার করে স্বয়ংক্রিয় করেছি:

  1. একটি CSV ফাইল হিসাবে সাপ্তাহিক পুরো বোর্ডের অবস্থা সংরক্ষণ করুন।
  2. একটি পান্ডাস ডেটাফ্রেমে সমস্ত ঐতিহাসিক CSV ফাইল পড়ুন।
  3. আমরা কীভাবে অগ্রগতি ট্র্যাক করতে চাই তার সম্মত ফর্ম্যাটে ডেটা সাজান, ফিল্টার করুন, গ্রুপ করুন এবং ম্যানিপুলেট করুন (অ্যাক্টিভিটি, ওয়ার্কস্ট্রিম, ইত্যাদির অবস্থা দ্বারা)।
  4. একটি এক্সেল ফাইলে আউটপুটটি তার নিজস্ব শীটের মধ্যে প্রতিটি বিশ্লেষণের ডেটা সহ লিখুন, এমনভাবে ফর্ম্যাট করুন যাতে এটি সহজভাবে কপি করে থিঙ্ক-সেল চার্টে আটকানো যায়।
  5. মাসিক স্টিয়ারিং কমিটির সভার জন্য রিপোর্টিং প্যাকেজের জন্য টেবিল এবং চার্ট তৈরি করুন৷

স্ক্রিপ্টটি বিকাশের জন্য কয়েক ঘন্টার অগ্রিম বিনিয়োগের প্রয়োজন ছিল, কিন্তু এখন, স্টিয়ারিং কমিটির মিটিং বা অ্যাডহক বিশ্লেষণের জন্য রিপোর্টিং প্যাক আপডেট করতে কয়েক মিনিট সময় লাগে। আক্ষরিক অর্থে, ডান ফোল্ডারে যেতে প্রায় 30 সেকেন্ড এবং একটি এক-লাইন কমান্ড দিয়ে স্ক্রিপ্টটি চালাতে এবং তারপর স্লাইড ডেকে আউটপুটটি কপি-পেস্ট করতে কয়েক মিনিট। বারোটি ওয়ার্কস্ট্রীম জুড়ে প্রায় 500টি অ্যাক্টিভিটি (কার্ড) সহ প্রায় এক মাস আগে থেকে, তারা কীভাবে চলে তা সাপ্তাহিক ট্র্যাকিং, দুই বছরের একটি প্রোগ্রাম টাইমলাইনের মধ্যে, আপনি দ্রুত নিজেকে হাজার হাজার এবং শেষ পর্যন্ত কয়েক ডজন ডেটা পয়েন্টের সাথে কাজ করছেন। ফাইলের। অটোমেশন ছাড়া, আমরা এখানে কিছু খুব ক্লান্তিকর কাজের কথা বলছি।

"টাকার সময়ের মূল্য" শুধুমাত্র জিনিসগুলি নিয়ে চলার মধ্যে ট্রেড-অফ, বা অটোমেশন সেট আপ করে আরও প্রাথমিক কাজের চাপ যোগ করা অর্থের একটি সাধারণ বিষয়। CSV ফাইল হিসাবে ডেটা রপ্তানি করে আমি এই প্রক্রিয়ার প্রথম ধাপে একই রকম সিদ্ধান্ত নিয়েছি। MeisterTask, অনেক আধুনিক ওয়েব অ্যাপ্লিকেশনের মতো, একটি API রয়েছে, যা আপনার পাইথন অ্যাপ্লিকেশনের সাথে সংযুক্ত করা যেতে পারে, তবে এটি সেট আপ করার সময় ব্যয় করা আমাদের এখানে ব্যবহারের ক্ষেত্রে সময় সাশ্রয়ের চেয়ে অনেক বেশি হবে৷

সুতরাং, যেমন আপনি দেখতে পাচ্ছেন, প্রায়শই সর্বোত্তম সমাধান হল কর্মপ্রবাহের নির্দিষ্ট ধাপগুলিকে স্বয়ংক্রিয় করা এবং অন্যদের ম্যানুয়াল রাখা।

2. ওয়েব স্ক্র্যাপিং, গুগল ম্যাপ এপিআই, এবং এক্সেল ব্যবহার করে বাড়ির মূল্য পরিসংখ্যান বিশ্লেষণ করা হচ্ছে

আরেকটি উদাহরণ হল আমি ব্যক্তিগত আগ্রহের বাইরে কিছু করেছি কিন্তু আমি এটি হাইলাইট করতে চাই কারণ এতে পাইথনের ইউটিলিটির আরও কিছু আকর্ষণীয় উপাদান রয়েছে:

  1. প্রদত্ত এলাকার জন্য ঠিকানা, আকার, কক্ষের সংখ্যা, জিজ্ঞাসার মূল্য এবং অন্যান্য বৈশিষ্ট্য সহ রিয়েল এস্টেট তালিকার ডেটা স্ক্র্যাপ করুন; মোট কয়েকশ থেকে সম্ভবত এক হাজার লাইন।
  2. পাইথন ডেটা স্ট্রাকচারে সেভ করুন।
  3. Google Maps API-এর সাথে সংযোগ করুন এবং, প্রতিটি তালিকার জন্য, সম্পত্তি এবং মূল ল্যান্ডমার্কের মধ্যে দূরত্ব পুনরুদ্ধার করুন যেমন সমুদ্র, শহরের কেন্দ্র, নিকটতম ট্রেন স্টেশন, নিকটতম বিমানবন্দর, ইত্যাদি।
  4. একটি Excel ফাইলে ডেটা রপ্তানি করুন।
  5. রিগ্রেশন চালানোর জন্য স্ট্যান্ডার্ড এক্সেল কার্যকারিতা ব্যবহার করুন, পরিসংখ্যান গণনা করুন এবং স্ট্যান্ডার্ড মেট্রিক্সে চার্ট তৈরি করুন যেমন প্রতি বর্গ মিটার মূল্য এবং ল্যান্ডমার্কের দূরত্ব৷

রিয়েল এস্টেট খোঁজার সময় পছন্দের পরিপ্রেক্ষিতে এবং আর্থিক সীমাবদ্ধতার পরিপ্রেক্ষিতে এখানে ফলাফলগুলি আপনার নিজের ব্যক্তিগত ওজনের সাথে মিলিত হতে পারে।

এই মাত্র দুটি উদাহরণ, স্প্রেডশীট-সম্পর্কিত কাজ স্বয়ংক্রিয়করণ এবং বৈশিষ্ট্য যোগ করার উপর দৃষ্টি নিবদ্ধ করা হয়েছে, কিন্তু পাইথনের সাথে সুযোগগুলি প্রায় অন্তহীন। পরবর্তী বিভাগে, আমি পাইথনের একটি ধাপে ধাপে মন্টে কার্লো সিমুলেশন টিউটোরিয়ালের দিকে যাওয়ার আগে এটি এত জনপ্রিয় হওয়ার কারণগুলির রূপরেখা দেব৷

কেন পাইথন ফাইন্যান্স পেশাদারদের জন্য একটি দুর্দান্ত পছন্দ

প্রোগ্রামিং ভাষা পাইথন প্রায় 1990 সাল থেকে চলে আসছে, কিন্তু সাম্প্রতিক বছরগুলোতে এর জনপ্রিয়তা বিস্ফোরিত হয়নি।

এর বেশ কয়েকটি কারণ রয়েছে, আসুন একে একে একে একে দেখি।

1. পাইথন হল একটি উচ্চ-স্তরের প্রোগ্রামিং ভাষা

একটি উচ্চ-স্তরের প্রোগ্রামিং ভাষা এমন একটি যা কম্পিউটারের অভ্যন্তরীণ কাজের অনেক বিবরণকে বিমূর্ত করে দেয়। একটি ভাল উদাহরণ মেমরি ব্যবস্থাপনা। নিম্ন-স্তরের প্রোগ্রামিং ল্যাঙ্গুয়েজের জন্য কম্পিউটারের মেমরি কীভাবে সাজানো, বরাদ্দ করা এবং প্রকাশ করা হয় তার জটিলতাগুলির একটি বিশদ বোঝার প্রয়োজন, কাজগুলি পরিচালনা করার জন্য প্রয়োজনীয় সময় এবং কোডের লাইন ছাড়াও। পাইথন বিমূর্ত করে এবং এই বিবরণগুলির অনেকগুলি স্বয়ংক্রিয়ভাবে পরিচালনা করে, আপনি যা করতে চান তার উপর ফোকাস করতে দেয়।

2. এটা সংক্ষিপ্ত

যেহেতু পাইথন একটি উচ্চ-স্তরের প্রোগ্রামিং ভাষা, কোডটি আরও সংক্ষিপ্ত এবং প্রায় সম্পূর্ণরূপে প্রযুক্তিগত বাস্তবায়নের বিবরণের পরিবর্তে আপনি যা অর্জন করতে চান তার ব্যবসায়িক যুক্তির উপর দৃষ্টি নিবদ্ধ করে। ভাষা ডিজাইনের পছন্দগুলি এতে অবদান রাখে:উদাহরণ হিসাবে, পাইথনের ফাংশন, লুপ এবং লাইনগুলিকে বর্ণনা করার জন্য কোঁকড়া ধনুর্বন্ধনী বা সেমিকোলন ব্যবহারের প্রয়োজন হয় না যেভাবে অন্য অনেক ভাষা করে, যা এটিকে আরও সংক্ষিপ্ত করে তোলে এবং কিছু যুক্তি হিসাবে, উন্নতি করে পঠনযোগ্যতা।

3. শিখতে এবং বুঝতে সহজ

একটি পর্যবেক্ষণ যা পাইথনে ভাষা ডিজাইন পছন্দকে প্রভাবিত করেছে তা হল যে প্রোগ্রামগুলি লেখার চেয়ে বেশি বার পড়া হয়। পাইথন এখানে উৎকর্ষ সাধন করে কারণ এর কোডটি সাধারণ ইংরেজির খুব কাছাকাছি দেখায়, বিশেষ করে যদি আপনি আপনার স্ক্রিপ্ট বা প্রোগ্রামের বিভিন্ন উপাদানকে বুদ্ধিমানভাবে নাম দেন।

4. দ্রুত, পুনরাবৃত্তিমূলক বিকাশের জন্য উপযুক্ত

আলোকিত বিচার এবং ত্রুটি ত্রুটিহীন বুদ্ধির পরিকল্পনাকে ছাড়িয়ে যায়। - ডেভিড কেলি

পাইথন প্রোটোটাইপিং এবং দ্রুত, পুনরাবৃত্তিমূলক বিকাশের (এবং, হ্যাঁ, ট্রায়াল-এন্ড-এরর) জন্য আদর্শ কারণ পাইথন শেল, আইপিথন এবং জুপিটার নোটবুকের মতো ইন্টারেক্টিভ ইন্টারপ্রেটার টুলগুলি পাইথন টুলচেইনের সামনে এবং কেন্দ্রে থাকে। এই ইন্টারেক্টিভ পরিবেশে, আপনি বিচ্ছিন্নভাবে কোডের প্রতিটি লাইন লিখতে এবং কার্যকর করতে পারেন এবং ফলাফল (বা একটি সহায়ক ত্রুটি বার্তা) অবিলম্বে দেখতে পারেন। অন্যান্য ভাষাতেও এটি আছে, কিন্তু বেশিরভাগ ক্ষেত্রে পাইথনের মতো একই মাত্রায় নয়।

5. প্রোটোটাইপিং এবং প্রোডাকশন কোড উভয়ের জন্য ব্যবহার করা যেতে পারে

প্রোটোটাইপিংয়ের জন্য দুর্দান্ত হওয়ার পাশাপাশি, পাইথন বড় উত্পাদন অ্যাপ্লিকেশনগুলির জন্য একটি দুর্দান্ত এবং শক্তিশালী ভাষা। বিশ্বের কিছু বড় সফ্টওয়্যার কোম্পানি বিভিন্ন ধরনের অ্যাপ্লিকেশন এবং ব্যবহারের ক্ষেত্রে পাইথনের ব্যাপক ব্যবহার করে।

6. সঙ্গে আসে "ব্যাটারি অন্তর্ভুক্ত:" পাইথন স্ট্যান্ডার্ড লাইব্রেরি

মৌলিক ক্রিয়াকলাপের জন্য প্রয়োজনীয় সবকিছুই ভাষাতে তৈরি করা হয়েছে, তবে তা ছাড়াও, পাইথন স্ট্যান্ডার্ড লাইব্রেরিতে ফাইল, মিডিয়া, নেটওয়ার্কিং, তারিখ এবং সময় তথ্য এবং আরও অনেক কিছু নিয়ে কাজ করার জন্য সরঞ্জাম রয়েছে। এটি আপনাকে তৃতীয় পক্ষের প্যাকেজগুলি সন্ধান না করেই বিভিন্ন ধরণের কাজ সম্পাদন করতে দেয়৷

7. আর্থিক বিশ্লেষণের জন্য গ্রেট থার্ড-পার্টি লাইব্রেরি

ফাইন্যান্স পেশাদারদের জন্য, এর ডেটাফ্রেম সহ পান্ডাস এবং সিরিজ বস্তু, এবং Numpy এর ndarray সহ পাইথনের সাথে আর্থিক বিশ্লেষণের কর্মঘোড়া। ম্যাটপ্লটলিব এবং অন্যান্য ভিজ্যুয়ালাইজেশন লাইব্রেরিগুলির সাথে মিলিত, উত্পাদনশীলতাকে সহায়তা করার জন্য আপনার হাতে দুর্দান্ত সরঞ্জাম রয়েছে৷

8. পাইথন বিনামূল্যে!

পাইথন একটি ওপেন সোর্স লাইসেন্সের অধীনে বিকশিত হয়েছে যাতে এটি বাণিজ্যিক ব্যবহারের জন্যও বিনামূল্যে।

পাইথন এবং ফিনান্স একসাথে ব্যবহার করার ধাপে ধাপে টিউটোরিয়াল

আমার পূর্ববর্তী ব্লগ পোস্টে বর্ণিত মন্টে কার্লো সিমুলেশনের একটি সরলীকৃত সংস্করণ কিভাবে তৈরি করা যায় তা দেখানো একটি ধাপে ধাপে টিউটোরিয়াল, কিন্তু এক্সেলের জন্য @RISK প্লাগইনের পরিবর্তে পাইথন ব্যবহার করে।

মন্টে কার্লো পদ্ধতিগুলি সংখ্যাসূচক ফলাফল পেতে এলোমেলো নমুনার উপর নির্ভর করে। এরকম একটি অ্যাপ্লিকেশন হল সম্ভাব্যতা বন্টন থেকে এলোমেলো নমুনা আঁকতে যা বিশ্বের অনিশ্চিত সম্ভাব্য ভবিষ্যতের রাজ্যগুলিকে প্রতিনিধিত্ব করে যেখানে ভেরিয়েবল বা অনুমানগুলি বিভিন্ন মান গ্রহণ করতে পারে৷

বিকল্প বা অন্যান্য ডেরিভেটিভের মূল্যায়ন দেখানো আরও সাধারণ উদাহরণের পরিবর্তে একটি সরলীকৃত DCF মূল্যায়ন মডেলে মন্টে কার্লো সিমুলেশন করা সহায়ক, কারণ এর জন্য আমাদের আর্থিক বিবৃতি গণনা করার মৌলিক বিষয়গুলির বাইরে কোনো গণিতের প্রয়োজন নেই এবং নগদ প্রবাহে ছাড়, আমাদের পাইথন ধারণা এবং সরঞ্জামগুলিতে ফোকাস করার অনুমতি দেয়। যদিও অনুগ্রহ করে মনে রাখবেন যে এই মৌলিক টিউটোরিয়াল মডেলটি মূল ধারণাগুলিকে চিত্রিত করার জন্য তৈরি করা হয়েছে, এবং কোন ব্যবহারিক উদ্দেশ্যে এটি কার্যকর নয়। আমি মন্টে কার্লো সিমুলেশনের আরও কোনো একাডেমিক দিক স্পর্শ করব না।

টিউটোরিয়ালটি অনুমান করে যে আপনি প্রোগ্রামিংয়ের মৌলিক বিল্ডিং ব্লকগুলির সাথে পরিচিত, যেমন ভেরিয়েবল এবং ফাংশন। যদি তা না হয়, উদাহরণ স্বরূপ এই ভূমিকার মূল ধারণাগুলি পরীক্ষা করতে 10 মিনিট সময় নেওয়া সহায়ক হতে পারে৷

প্রারম্ভিক বিন্দু এবং কাঙ্ক্ষিত ফলাফল

আমি মন্টে কার্লো সিমুলেশন টিউটোরিয়ালে ব্যবহৃত একই খুব সরলীকৃত ডিসিএফ মূল্যায়ন মডেল দিয়ে শুরু করি। এটিতে তিনটি আর্থিক বিবৃতি এবং তিনটি হাইলাইট করা ইনপুট সেল থেকে কিছু মূল লাইন আইটেম রয়েছে, যেগুলি এক্সেল সংস্করণে পয়েন্ট অনুমান রয়েছে যা আমরা এখন সম্ভাব্য ফলাফলের পরিসীমা অন্বেষণ শুরু করার জন্য সম্ভাব্যতা বিতরণের সাথে প্রতিস্থাপন করতে চাই৷

একটি ছোট স্ক্রিপ্ট বিকাশের জন্য একটি দ্বি-পদক্ষেপ পদ্ধতি

এটি কাজ করুন, এটি সঠিক করুন, এটি দ্রুত করুন - কেন্ট বেক

এই টিউটোরিয়ালটির উদ্দেশ্য হল পাইথনে নতুন ফিনান্স পেশাদারদের একটি পরিচিতি দেওয়া যা একটি দরকারী প্রোগ্রাম দেখতে কেমন হতে পারে তা নয়, বরং এটিকে বিকাশ করতে আপনি যে পুনরাবৃত্তিমূলক প্রক্রিয়া ব্যবহার করতে পারেন তার একটি ভূমিকাও। সুতরাং, এটির দুটি অংশ রয়েছে:

  1. প্রথম, আমি একটি সরল পদ্ধতি ব্যবহার করে একটি কার্যকরী প্রোটোটাইপ তৈরি করি যা আমি মনে করি অনুসরণ করা সহজ এবং আপনি যদি স্ক্র্যাচ থেকে শুরু করতে চান তবে এই প্রকল্পটি শুরু করার জন্য যে প্রক্রিয়াটি ব্যবহার করা যেতে পারে তার সম্পূর্ণ ভিন্ন নয়৷
  2. তারপর, কাজের প্রোটোটাইপ তৈরি করার পর, আমি রিফ্যাক্টরিং প্রক্রিয়ার মধ্য দিয়ে চলেছি - কোডের কার্যকারিতা পরিবর্তন না করেই এর গঠন পরিবর্তন করে। আপনি সেই অংশের জন্য কাছাকাছি থাকতে চাইতে পারেন - এটি প্রথমটির চেয়ে আরও মার্জিত সমাধান, এবং বোনাস হিসাবে, এটি কার্যকর করার সময়ের পরিপ্রেক্ষিতে প্রায় 75 গুণ দ্রুত।

1. একটি কার্যকরী প্রোটোটাইপ বিকাশ করা হচ্ছে

জুপিটার নোটবুক সেট আপ করা হচ্ছে

জুপিটার নোটবুক পাইথনের সাথে ইন্টারেক্টিভভাবে কাজ করার জন্য একটি দুর্দান্ত সরঞ্জাম। এটি কোষ সহ একটি ইন্টারেক্টিভ পাইথন দোভাষী যাতে কোড, মার্কডাউন পাঠ্য, চিত্র বা অন্যান্য ডেটা থাকতে পারে। এই টিউটোরিয়ালটির জন্য আমি পাইথন কোয়ান্ট প্ল্যাটফর্ম ব্যবহার করেছি, তবে আমি Google এর Colaboratory সুপারিশ করতে পারি, যা বিনামূল্যে এবং ক্লাউডে চলে। একবার সেখানে গেলে, "ফাইল" মেনুতে "নতুন পাইথন 3 নোটবুক" নির্বাচন করুন এবং আপনি যেতে প্রস্তুত৷

এটি করার পরে, পরবর্তী পদক্ষেপটি হল ডেটা ম্যানিপুলেশন এবং ভিজ্যুয়ালাইজেশনের জন্য আমাদের প্রয়োজনীয় তৃতীয়-পক্ষের প্যাকেজগুলি আমদানি করা এবং প্রোগ্রামটিকে বলা যে আমরা আলাদা উইন্ডোতে পরিবর্তে আমাদের নোটবুকে চার্ট ইনলাইনে দেখতে চাই:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

আমরা আমাদের প্রথম ভেরিয়েবলের নামকরণ শুরু করার আগে একটি নোট। যেমনটি আমি ইতিমধ্যে হাইলাইট করেছি, পাঠযোগ্যতা পাইথনের অন্যতম শক্তি। ভাষা নকশা এটিকে সমর্থন করার জন্য অনেক দূর এগিয়ে যায়, কিন্তু কোড লেখার প্রত্যেকেই এটিকে পঠনযোগ্য এবং বোধগম্য করার জন্য দায়ী, শুধুমাত্র অন্যদের জন্য নয়, নিজের জন্যও। ঈগলসনের আইন অনুসারে, "আপনার নিজের যেকোন কোড যা আপনি ছয় বা তার বেশি মাস ধরে দেখেননি তাও অন্য কেউ লিখে থাকতে পারে।"

একটি ভাল নিয়ম হল আপনার প্রোগ্রামের উপাদানগুলির নাম এমনভাবে রাখা যাতে আপনি আলাদা মন্তব্যের প্রয়োজন কমিয়ে দেন যা ব্যাখ্যা করে যে আপনার প্রোগ্রামটি কী করে।

এটা মাথায় রেখে, চলুন এগিয়ে যাই।

আর্থিক বিবৃতি তৈরি করা

পাইথনে বিদ্যমান স্প্রেডশীট ডেটার সাথে আমরা কাজ করতে পারি এমন অনেক উপায় রয়েছে। উদাহরণস্বরূপ, আমরা read_excel ব্যবহার করে কোডের একটি লাইন সহ একটি পান্ডাস ডেটাফ্রেমে একটি শীট পড়তে পারি আদেশ আপনি যদি আপনার স্প্রেডশীট এবং পাইথন কোডের মধ্যে একটি কঠোর ইন্টিগ্রেশন এবং রিয়েল-টাইম লিঙ্ক চান, তাহলে সেই কার্যকারিতা প্রদানের জন্য বিনামূল্যে এবং বাণিজ্যিক উভয় বিকল্প উপলব্ধ রয়েছে৷

যেহেতু এখানে মডেলটি খুবই সহজ, এবং পাইথন ধারণার উপর আমাদের ফোকাস করার জন্য, আমরা এটিকে আমাদের স্ক্রিপ্টে স্ক্র্যাচ থেকে পুনরায় তৈরি করব। প্রথম অংশের শেষে, আমি দেখাব কিভাবে আপনি একটি স্প্রেডশীটে যা তৈরি করেছি তা রপ্তানি করতে পারেন৷

আর্থিক বিবৃতিগুলির একটি পাইথন উপস্থাপনা তৈরি করার প্রথম পদক্ষেপ হিসাবে, আমাদের একটি উপযুক্ত ডেটা কাঠামোর প্রয়োজন হবে। বেছে নেওয়ার জন্য অনেকগুলি আছে, কিছু পাইথনে তৈরি, অন্যগুলি বিভিন্ন লাইব্রেরি থেকে, অথবা আমরা আমাদের নিজস্ব তৈরি করতে পারি। আপাতত, এর কার্যকারিতা দেখতে পান্ডাস লাইব্রেরি থেকে একটি সিরিজ ব্যবহার করা যাক:

years = ['2018A', '2019B', '2020P', '2021P', '2022P', '2023P']
sales = pd.Series(index=years)
sales['2018A'] = 31.0  
sales

এই ইনপুট এবং এর সংশ্লিষ্ট আউটপুট নীচে দেখানো হয়েছে:

প্রথম তিনটি লাইনের সাহায্যে আমরা বছরের সমন্বিত একটি সূচক সহ একটি ডেটা স্ট্রাকচার তৈরি করেছি (প্রত্যেকটি এটি প্রকৃত, বাজেট বা প্রজেক্টেড কিনা তা দেখানোর জন্য চিহ্নিত), একটি প্রারম্ভিক মান (মিলিয়ন ইউরোতে, মূল DCF মডেলের মতো), এবং অনুমানগুলির জন্য খালি (NaN, "একটি সংখ্যা নয়") ঘর। চতুর্থ লাইনটি ডেটার একটি উপস্থাপনা প্রিন্ট করে - সাধারণভাবে, ইন্টারেক্টিভ ইন্টারপ্রেটারে একটি ভেরিয়েবল বা অন্যান্য বস্তুর নাম টাইপ করা সাধারণত আপনাকে এটির একটি বুদ্ধিমান উপস্থাপনা দেবে৷

এর পরে, আমরা প্রক্ষিপ্ত বার্ষিক বিক্রয় বৃদ্ধির প্রতিনিধিত্ব করার জন্য একটি পরিবর্তনশীল ঘোষণা করি। এই পর্যায়ে, এটি একটি বিন্দু অনুমান, আমাদের মূল DCF মডেলের মতো একই চিত্র। আমরা প্রথমে সেই একই ইনপুটগুলি ব্যবহার করতে চাই এবং নিশ্চিত করতে চাই যে আমাদের পাইথন সংস্করণটি একই কাজ করে এবং এক্সেল সংস্করণের মতো একই ফলাফল দেয়, সম্ভাব্যতা বিতরণের সাথে পয়েন্ট অনুমান প্রতিস্থাপন করার আগে। এই ভেরিয়েবলটি ব্যবহার করে, আমরা একটি লুপ তৈরি করি যা পূর্ববর্তী বছরের এবং বৃদ্ধির হারের উপর ভিত্তি করে অনুমানগুলির প্রতিটি বছরে বিক্রয় গণনা করে:

growth_rate = 0.1
for year in range(1, 6):
    sales[year] = sales[year - 1] * (1 + growth_rate)
    
sales

আমরা এখন NaN:

এর পরিবর্তে প্রজেক্ট সেল করেছি

একই পন্থা ব্যবহার করে, আমরা আর্থিক বিবৃতিগুলি চালিয়ে যাই, আমাদের প্রয়োজন অনুযায়ী ভেরিয়েবল ঘোষণা করে এবং শেষ পর্যন্ত বিনামূল্যে নগদ প্রবাহে পৌঁছানোর জন্য প্রয়োজনীয় গণনা সম্পাদন করি। একবার আমরা সেখানে পৌঁছলে আমরা পরীক্ষা করতে পারি যে আমাদের কাছে যা আছে তা DCF মডেলের এক্সেল সংস্করণ যা বলে তার সাথে মিলে যায়৷

ebitda_margin = 0.14
depr_percent = 0.032
ebitda = sales * ebitda_margin
depreciation = sales * depr_percent
ebit = ebitda - depreciation
nwc_percent = 0.24
nwc = sales * nwc_percent
change_in_nwc = nwc.shift(1) - nwc 
capex_percent = depr_percent
capex = -(sales * capex_percent)
tax_rate = 0.25
tax_payment = -ebit * tax_rate
tax_payment = tax_payment.apply(lambda x: min(x, 0))
free_cash_flow = ebit + depreciation + tax_payment + capex + change_in_nwc
free_cash_flow

এটি আমাদের বিনামূল্যে নগদ প্রবাহ দেয়:

উপরের একটি লাইনটি সম্ভবত এই পর্যায়ে একটি মন্তব্য প্রয়োজন দ্বিতীয় tax_payment রেফারেন্স এখানে, আমরা একটি ছোট ফাংশন প্রয়োগ করি তা নিশ্চিত করার জন্য যে পরিস্থিতিতে ট্যাক্সের আগে মুনাফা নেতিবাচক হয়ে যায়, তখন আমাদের ইতিবাচক ট্যাক্স পেমেন্ট হবে না। এটি দেখায় যে আপনি কতটা কার্যকরভাবে একটি পান্ডাস সিরিজ বা ডেটাফ্রেমের সমস্ত কক্ষে কাস্টম ফাংশন প্রয়োগ করতে পারেন৷ প্রয়োগকৃত প্রকৃত ফাংশন অবশ্যই একটি সরলীকরণ। একটি বৃহত্তর মূল্যায়ন অনুশীলনের জন্য আরও বাস্তবসম্মত মডেলের একটি পৃথক ট্যাক্স মডেল থাকবে যা কোম্পানি-নির্দিষ্ট কারণগুলির একটি সংখ্যার উপর ভিত্তি করে প্রদত্ত প্রকৃত নগদ কর গণনা করে৷

DCF মূল্যায়ন সম্পাদন করা

অনুমানিত নগদ প্রবাহে পৌঁছে, আমরা এখন একটি সাধারণ টার্মিনাল মান গণনা করতে পারি এবং DCF ফলাফল পেতে বর্তমানের সমস্ত নগদ প্রবাহকে ছাড় দিতে পারি। নিম্নলিখিত কোডটি ইন্ডেক্সিং এবং স্লাইসিং প্রবর্তন করে, যা আমাদের ডাটা স্ট্রাকচারে এক বা একাধিক উপাদান অ্যাক্সেস করতে দেয়, যেমন পান্ডাস সিরিজ অবজেক্ট।

আমরা কাঠামোর নামের পরে সরাসরি বর্গাকার বন্ধনী লিখে উপাদানগুলি অ্যাক্সেস করি। সহজ সূচীকরণ উপাদানগুলিকে তাদের অবস্থান অনুসারে অ্যাক্সেস করে, শূন্য দিয়ে শুরু করে, যার অর্থ হল free_cash_flow[1] আমাদের দ্বিতীয় উপাদান দিতে হবে. [-1] শেষ উপাদানটি অ্যাক্সেস করার জন্য সংক্ষিপ্ত বিবরণ (গত বছরের নগদ প্রবাহ টার্মিনাল মান গণনা করতে ব্যবহৃত হয়), এবং একটি কোলন ব্যবহার করে আমাদের একটি স্লাইস দেয়, যার অর্থ [1:] প্রথমটি ছাড়া আমাদের সমস্ত উপাদান দেয়, যেহেতু আমরা ঐতিহাসিক বছর 2018A অন্তর্ভুক্ত করতে চাই না আমাদের DCF মূল্যায়নে।

cost_of_capital = 0.12
terminal_growth = 0.02
terminal_value = ((free_cash_flow[-1] * (1 + terminal_growth)) / 
                 (cost_of_capital - terminal_growth))
discount_factors = [(1 / (1 + cost_of_capital)) ** i for i in range (1,6)]
dcf_value = (sum(free_cash_flow[1:] * discount_factors) +
            terminal_value * discount_factors[-1])
dcf_value

এটি আমাদের প্রোটোটাইপের প্রথম অংশের সমাপ্তি ঘটায় - পাইথনে আমাদের কাছে এখন একটি কার্যকরী DCF মডেল রয়েছে, যদিও এটি একটি খুব প্রাথমিক মডেল।

ডেটা রপ্তানি করা

প্রকৃত মন্টে কার্লো সিমুলেশনে যাওয়ার আগে, পান্ডাস প্যাকেজে উপলব্ধ রপ্তানি ক্ষমতা উল্লেখ করার জন্য এটি একটি ভাল সময় হতে পারে। আপনার যদি একটি পান্ডাস ডেটাফ্রেম অবজেক্ট থাকে, তাহলে আপনি to_excel ব্যবহার করে একটি লাইন সহ একটি এক্সেল ফাইলে লিখতে পারেন পদ্ধতি এক ডজনেরও বেশি অন্যান্য ফরম্যাট এবং গন্তব্যে রপ্তানি করার অনুরূপ কার্যকারিতা রয়েছে৷

output = pd.DataFrame([sales, ebit, free_cash_flow],
                     index=['Sales', 'EBIT', 'Free Cash Flow']).round(1)
output.to_excel('Python DCF Model Output.xlsx')
output

আমাদের মন্টে কার্লো সিমুলেশনের জন্য সম্ভাব্যতা বিতরণ তৈরি করা

এখন আমরা পরবর্তী চ্যালেঞ্জ মোকাবেলা করার জন্য প্রস্তুত:সম্ভাব্যতা বিতরণের সাথে কিছু পয়েন্ট অনুমান ইনপুট প্রতিস্থাপন করতে। যদিও এই বিন্দু পর্যন্ত ধাপগুলি Excel-এ একই মডেল তৈরির তুলনায় কিছুটা কষ্টকর বলে মনে হতে পারে, এই পরবর্তী কয়েকটি লাইন আপনাকে পাইথন কতটা শক্তিশালী হতে পারে তার একটি আভাস দেবে৷

আমাদের প্রথম ধাপ হল সিমুলেশনে আমরা কতগুলি পুনরাবৃত্তি করতে চাই তা নির্ধারণ করা। প্রারম্ভিক বিন্দু হিসাবে 1,000 ব্যবহার করা যথেষ্ট ডেটা পয়েন্ট পাওয়ার মধ্যে একটি ভারসাম্য বজায় রাখে যাতে বোধগম্য আউটপুট প্লট পাওয়া যায়, বনাম একটি সংবেদনশীল সময় ফ্রেমের মধ্যে সিমুলেশন ফিনিশ করা। এর পরে, আমরা প্রকৃত বিতরণ তৈরি করি। সরলতার জন্য, আমি এখানে তিনটি সাধারণ বিতরণ তৈরি করেছি, কিন্তু NumPy লাইব্রেরিতে বেছে নেওয়ার জন্য প্রচুর পরিমাণে বিতরণ রয়েছে এবং পাইথন স্ট্যান্ডার্ড লাইব্রেরি সহ দেখার মতো অন্যান্য জায়গাও রয়েছে। কোন ডিস্ট্রিবিউশন ব্যবহার করতে হবে তা স্থির করার পরে, আমাদের তাদের আকৃতি বর্ণনা করার জন্য প্রয়োজনীয় প্যারামিটারগুলি নির্দিষ্ট করতে হবে, যেমন গড় এবং মানক বিচ্যুতি এবং পছন্দসই ফলাফলের সংখ্যা৷

iterations = 1000
sales_growth_dist = np.random.normal(loc=0.1, scale=0.01, size=iterations)
ebitda_margin_dist = np.random.normal(loc=0.14, scale=0.02, size=iterations)
nwc_percent_dist = np.random.normal(loc=0.24, scale=0.01, size=iterations)
plt.hist(sales_growth_dist, bins=20)
plt.show()

এখানে আপনি যুক্তি দিতে পারেন যে EBITDA বিক্রয় থেকে স্বতন্ত্র একটি পৃথক র্যান্ডম পরিবর্তনশীল হওয়া উচিত নয় বরং কিছু পরিমাণে বিক্রয়ের সাথে সম্পর্কযুক্ত। আমি এর সাথে একমত হব, এবং যোগ করব যে এটি ব্যয় কাঠামোর গতিশীলতা (পরিবর্তনশীল, আধা-পরিবর্তনশীল এবং স্থির খরচ) এবং মূল খরচ ড্রাইভার (যার মধ্যে কয়েকটির নিজস্ব সম্ভাব্যতা বিতরণ থাকতে পারে) এর একটি দৃঢ় বোঝার দ্বারা চালিত হওয়া উচিত। যেমন ইনপুট পণ্যের দাম), কিন্তু স্থান এবং স্বচ্ছতার স্বার্থে আমি সেই জটিলতাগুলি এখানে রেখে দিচ্ছি।

আপনার পছন্দের ডিস্ট্রিবিউশন এবং পরামিতি সম্পর্কে আপনাকে যত কম তথ্য জানাতে হবে, সম্ভাব্য পরিস্থিতির পরিসরে একটি ঐক্যমত্য দৃষ্টিভঙ্গি তৈরি করতে আপনাকে অভিজ্ঞতার সাথে মিলিত আপনার বিভিন্ন যথাযথ পরিশ্রমের কাজের ফলাফলের উপর তত বেশি নির্ভর করতে হবে। এই উদাহরণে, নগদ প্রবাহ অনুমান সহ, একটি বড় বিষয়গত উপাদান থাকবে, যার অর্থ হল সম্ভাব্যতা বন্টনগুলি কল্পনা করা গুরুত্বপূর্ণ হয়ে ওঠে। এখানে, আমরা একটি বেসিক ভিজ্যুয়ালাইজেশন পেতে পারি, বিক্রয় বৃদ্ধির বন্টন দেখায়, কোডের মাত্র দুটি ছোট লাইন দিয়ে। এইভাবে আমরা আইবলের যেকোনো ডিস্ট্রিবিউশনকে দ্রুত দেখতে পারি যা দলের যৌথ দৃষ্টিভঙ্গিকে সবচেয়ে ভালোভাবে প্রতিফলিত করে।

এখন আমাদের কাছে সিমুলেশন চালানোর জন্য প্রয়োজনীয় সমস্ত বিল্ডিং ব্লক রয়েছে, কিন্তু সেগুলি সিমুলেশন চালানোর জন্য একটি সুবিধাজনক বিন্যাসে নেই। এখানে একই কোড আছে যা আমরা এখন পর্যন্ত কাজ করেছি কিন্তু সবগুলো একটি কক্ষে একত্রিত হয়েছে এবং সুবিধার জন্য একটি ফাংশনে পুনরায় সাজানো হয়েছে:

def run_mcs():
    
    # Create probability distributions
    sales_growth_dist = np.random.normal(loc=0.1, scale=0.01, size=iterations)
    ebitda_margin_dist = np.random.normal(loc=0.14, scale=0.02, size=iterations)
    nwc_percent_dist = np.random.normal(loc=0.24, scale=0.01, size=iterations)
    
    # Calculate DCF value for each set of random inputs
    output_distribution = []
    for i in range(iterations):
        for year in range(1, 6):
            sales[year] = sales[year - 1] * (1 + sales_growth_dist[0])
        ebitda = sales * ebitda_margin_dist[i]
        depreciation = (sales * depr_percent)
        ebit = ebitda - depreciation
        nwc = sales * nwc_percent_dist[i]
        change_in_nwc = nwc.shift(1) - nwc 
        capex = -(sales * capex_percent)
        tax_payment = -ebit * tax_rate
        tax_payment = tax_payment.apply(lambda x: min(x, 0))
        free_cash_flow = ebit + depreciation + tax_payment + capex + change_in_nwc
        
        # DCF valuation
        terminal_value = (free_cash_flow[-1] * 1.02) / (cost_of_capital - 0.02)
        free_cash_flow[-1] += terminal_value
        discount_factors = [(1 / (1 + cost_of_capital)) ** i for i in range (1,6)]
        dcf_value = sum(free_cash_flow[1:] * discount_factors )
        output_distribution.append(dcf_value)
    
    return output_distribution

আমরা এখন পুরো সিমুলেশনটি চালাতে পারি এবং আউটপুট ডিস্ট্রিবিউশন প্লট করতে পারি, যা এই কোম্পানির 1,000 পুনরাবৃত্তির প্রতিটিতে নিম্নোক্ত কোড সহ নগদ প্রবাহের মূল্য হবে। %time কমান্ড পাইথন কোড নয় কিন্তু একটি নোটবুক শর্টহ্যান্ড যা কিছু চালানোর সময় পরিমাপ করে (আপনি পরিবর্তে স্ট্যান্ডার্ড লাইব্রেরি থেকে পাইথন ফাংশন ব্যবহার করতে পারেন)। আপনি যে কম্পিউটারে এটি চালান তার উপর এটি নির্ভর করে, কিন্তু এই সংস্করণটি 1,000টি পুনরাবৃত্তি চালাতে এবং ফলাফলটি কল্পনা করতে 1-2 সেকেন্ডের প্রয়োজন৷

%time plt.hist(run_mcs(), bins=20, color='r')
plt.show()

2. প্রোটোটাইপ পরিমার্জন

কিছু সরলীকরণ করা যেতে পারে এমন লুকোচুরি সন্দেহ হল পুরস্কারমূলক চ্যালেঞ্জের বিশ্বের সবচেয়ে ধনী উৎস। - Edsger Dijkstra

রিফ্যাক্টরিং বলতে বিদ্যমান কোডকে এর কার্যকারিতা পরিবর্তন না করেই এর গঠনকে উন্নত করার জন্য পুনরায় লেখার প্রক্রিয়াকে বোঝায় এবং এটি কোডিংয়ের সবচেয়ে মজাদার এবং ফলপ্রসূ উপাদানগুলির মধ্যে একটি হতে পারে। এটি করার বিভিন্ন কারণ থাকতে পারে। এটা হতে পারে:

  1. বিভিন্ন অংশগুলিকে আরও বুদ্ধিমান উপায়ে সংগঠিত করুন।
  2. ভেরিয়েবল এবং ফাংশনগুলিকে তাদের উদ্দেশ্য এবং কাজগুলিকে আরও পরিষ্কার করতে পুনরায় নাম দিন৷
  3. অনুমতি দিন এবং ভবিষ্যতের বৈশিষ্ট্যগুলির জন্য প্রস্তুত করুন৷
  4. সম্পাদনার গতি, মেমরি ফুটপ্রিন্ট বা অন্যান্য সম্পদের ব্যবহার উন্নত করুন।

সেই প্রক্রিয়ার একটি ধাপ কেমন হতে পারে তা দেখানোর জন্য, আমি প্রোটোটাইপ স্ক্রিপ্টের মতো ছড়িয়ে ছিটিয়ে না থেকে এক জায়গায় সমস্ত প্রাথমিক ভেরিয়েবল সংগ্রহ করে যে প্রোটোটাইপটি দিয়ে চলেছি তা পরিষ্কার করেছিলাম এবং একটি প্রক্রিয়ার মাধ্যমে এটি কার্যকর করার গতি অপ্টিমাইজ করেছি ভেক্টরাইজেশন .

NumPy অ্যারে ব্যবহার করা আপনাকে অনেক ধরণের ডেটা প্রসেসিং কাজগুলিকে সংক্ষিপ্ত অ্যারে এক্সপ্রেশন হিসাবে প্রকাশ করতে সক্ষম করে যার অন্যথায় লেখার লুপগুলির প্রয়োজন হতে পারে। অ্যারে এক্সপ্রেশনের সাথে স্পষ্ট লুপ প্রতিস্থাপনের এই অনুশীলনটিকে সাধারণত ভেক্টরাইজেশন বলা হয়। ওয়েস ম্যাককিনি

এটি এখন পরিষ্কার এবং বুঝতে সহজ দেখাচ্ছে:

# Key inputs from DCF model
years = 5
starting_sales = 31.0
capex_percent = depr_percent = 0.032
sales_growth = 0.1
ebitda_margin = 0.14
nwc_percent = 0.24
tax_rate = 0.25
# DCF assumptions
r = 0.12
g = 0.02
# For MCS model
iterations = 1000
sales_std_dev = 0.01
ebitda_std_dev = 0.02
nwc_std_dev = 0.01
def run_mcs():
    
    # Generate probability distributions
    sales_growth_dist = np.random.normal(loc=sales_growth, 
                                         scale=sales_std_dev, 
                                         size=(years, iterations))
    ebitda_margin_dist = np.random.normal(loc=ebitda_margin, 
                                          scale=ebitda_std_dev, 
                                          size=(years, iterations))
    nwc_percent_dist = np.random.normal(loc=nwc_percent, 
                                        scale=nwc_std_dev, 
                                        size=(years, iterations))
    
    # Calculate free cash flow
    sales_growth_dist += 1
    for i in range(1, len(sales_growth_dist)):
        sales_growth_dist[i] *= sales_growth_dist[i-1]
    sales = sales_growth_dist * starting_sales
    ebitda = sales * ebitda_margin_dist
    ebit = ebitda - (sales * depr_percent)
    tax = -(ebit * tax_rate)
    np.clip(tax, a_min=None, a_max=0)
    nwc = nwc_percent_dist * sales
    starting_nwc = starting_sales * nwc_percent
    prev_year_nwc = np.roll(nwc, 1, axis=0)
    prev_year_nwc[0] = starting_nwc
    delta_nwc = prev_year_nwc - nwc
    capex = -(sales * capex_percent)
    free_cash_flow = ebitda + tax + delta_nwc + capex
    # Discount cash flows to get DCF value
    terminal_value = free_cash_flow[-1] * (1 + g) / (r - g)
    discount_rates = [(1 / (1 + r)) ** i for i in range (1,6)]
    dcf_value = sum((free_cash_flow.T * discount_rates).T) 
    dcf_value += terminal_value * discount_rates[-1]
        
    return dcf_value

The main difference you will notice between this version and the previous one is the absence of the for i in range(iterations) loop. Using NumPy’s array operation, this version runs in 18 milliseconds compared to the 1.35 seconds for the prototype version - roughly 75x faster.

%time plt.hist(run_mcs(), bins=20, density=True, color="r")
plt.show()

I’m sure that further optimization is possible, since I put together both the prototype and refined version in a short time solely for the purpose of this tutorial.

Taking it Further

This tutorial showed some of the powerful features of Python, and if you were to develop this further the opportunities are almost endless. You could for example:

  • Scrape or download relevant company or sector statistics from web pages or other data sources, to help inform your choice of assumptions and probability distributions.
  • Use Python in quantitative finance applications, such as in an automated trading algorithm based on fundamental and/or macroeconomic factors.
  • Build exporting capabilities that generate output in a spreadsheet and/or presentation format, to be used as part of your internal transaction review and approval process, or for external presentations.

I haven’t even touched upon what you could also do with the various web, data science, and machine learning applications that have contributed to Python’s success.

In Summary:A Useful Language for Your Financial Toolbox

This article gave an introduction to the Python programming language, listed some of the reasons why it has become so popular in finance and showed how to build a small Python script. In a step-by-step tutorial, I walked through how Python can be used for iterative prototyping, interactive financial analysis, and for application code for valuation models, algorithmic trading programs and more.

For me, at the end of the day, the killer feature of Python technology is that it is simply fun to work with! If you enjoy problem-solving, building things and making workflows more efficient, then I encourage you to try it out. I would love to hear what you have done with it or would like to do with it.

  • O’Reilly books. I can especially recommend:
    • Python for Finance by Yves Hilpisch
    • Learning Python by Mark Lutz
    • Fluent Python by Luciano Ramalho
  • The Python Quants
  • PyCon talks on YouTube
  • Udemy

কর্পোরেট অর্থায়ন
  1. অ্যাকাউন্টিং
  2. ব্যবসা কৌশল
  3. ব্যবসা
  4. কাস্টমার সম্পর্কযুক্ত ব্যাবস্থাপত্র
  5. অর্থায়ন
  6. স্টক ব্যবস্থাপনা
  7. ব্যক্তিগত মূলধন
  8. বিনিয়োগ
  9. কর্পোরেট অর্থায়ন
  10. বাজেট
  11. সঞ্চয়
  12. বীমা
  13. ঋণ
  14. অবসর