মার্কভ চেইন এবং পাইথন ব্যবহার করে কীভাবে মার্কেট সিমুলেটর তৈরি করবেন

মার্কভ চেইন কী

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

এখানে একটি উদাহরণ -

আমাদের বলুন যে এখানে একটি ব্র্যান্ড এক্স রয়েছে যা ডসাস বিক্রি করে। আরও অনেক ব্র্যান্ড রয়েছে যেগুলি ডসাস বিক্রি করে এবং সেগুলি এক্স এর প্রতিযোগী current বর্তমান বাজার বিশ্লেষণ অনুসারে এক্সের বাজারে প্রায় 20% অংশ রয়েছে, এইভাবে বাজারের ৮০% অন্যান্য ব্র্যান্ডের দ্বারা ধরা পড়ে। এখন, এক্স বিজ্ঞাপন এবং প্রচারের মাধ্যমে তার ব্যবসায় প্রসারিত করতে চায়। যাক, প্রচারের পরে -

  • ইতিমধ্যে X গ্রাসকারীদের 90% এখনও এক্স এর সাথে রয়েছেন
  • এক্স গ্রাহক নয় তাদের %০% এক্সে স্যুইচ করবে

দুটি ব্র্যান্ড এক্স এবং আসুন X '(এক্স নয়) দুটি রাজ্যের প্রতিনিধিত্ব করে -

আসুন রূপান্তর চিত্রটি ব্যবহার করে উপরের উপসংহারগুলি দেখান -

চিত্রটি কোনও কিছু একই অবস্থায় থাকার বা অন্য একটি রাজ্যে যাওয়ার সম্ভাবনার প্রতিনিধিত্ব করে। আসুন একটি সম্ভাব্য ম্যাট্রিক্স, পি ব্যবহার করে একই প্রতিনিধিত্ব করুন -

যেখানে XX = 0.9 যারা X এর সাথে থাকেন তাদের প্রতিনিধিত্ব করেন, XX '(0.1) X ব্যবহার করে এমন ব্যক্তিদের প্রতিনিধিত্ব করে, X'X (0.6) X এবং X'X এ স্যুইচ করে এমন ব্যক্তিকে প্রতিনিধিত্ব করে' (0.4) অন্যদের ডোজ খাওয়া তাদের প্রতিনিধিত্ব করে ব্রান্ডের। উপরেরটিকে একটি রূপান্তর সম্ভাবনা ম্যাট্রিক্স বলা হয় এবং বর্তমান অবস্থা থেকে পরবর্তী অবস্থায় রূপান্তর দেখায়।

এই রাজ্যগুলি দোসের দোকানের বিজ্ঞাপন / প্রচারণার ফলাফল হিসাবে আসে। কীভাবে শুরুর অবস্থা?

আসুন প্রাথমিক হিসাবে সি হিসাবে প্রতিনিধিত্ব করি।

যদি আপনি মনে রাখেন, এক্স ব্র্যান্ডের জন্য প্রাথমিকভাবে দোসা শেয়ারটি ছিল 20% was

একে প্রাথমিক রাজ্য বিতরণ ম্যাট্রিক্স বলা হয়। এই তথ্যের ভিত্তিতে, আমরা পরের সপ্তাহে ব্র্যান্ড এক্স এক্স গ্রহণের সম্ভাব্যতাগুলি ভবিষ্যদ্বাণী করতে পারি। ধরা যাক সি এই সপ্তাহে রাজ্য ছিল। সুতরাং, পরের সপ্তাহে রাজ্যটি এস 1 হবে। এটি সন্ধানের জন্য, আমাদের সম্ভাব্য ম্যাট্রিক্স দিয়ে প্রাথমিক অবস্থায় গুণ করতে হবে -

এস 1 = [0.2 0.8] 0.9 0.1 0.6 0.4

= [0.2 * 0.9 + 0.8 * 0.6 0.2 * 0.1 + 0.8 * 0.4]

= [0.66 0.34]

এর অর্থ, এক সপ্তাহের পরে, বাজারের শেয়ারের পরিমাণ% up% পর্যন্ত বাড়বে বলে আশা করা হচ্ছে। আমরা এই সূত্রটিকে সাধারণ হিসাবে তৈরি করতে পারি,

এস 1 = সি * পি

এস 2 = এস 1 * পি - প্রাথমিক অবস্থার 2 সপ্তাহ পরে রাষ্ট্রটির পূর্বাভাস দেওয়ার জন্য

এসএন = এস (এন -১) * পি

একই সম্ভাবনা ম্যাট্রিক্স ব্যবহার করে মানগুলি চেষ্টা করে দেখুন এবং সপ্তাহে সপ্তাহে মান কীভাবে পরিবর্তিত হয় তা দেখুন।

উপরের উদাহরণে, আমাদের 2 টি রাজ্য ছিল। রাজ্যের সংখ্যা বাড়ার সাথে সাথে ম্যাট্রিক্সের আকার বাড়বে।

পাইথনে আপনি কীভাবে মার্কভ চেইন প্রয়োগ করবেন

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

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

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

আমরা মাইক্রোসফ্ট কর্পোরেশন থেকে ডেটা ব্যবহার করেছি। আপনি এফবি (ফেসবুক), আমাজন (এএমজেডএন) বা অন্য যে কোনওটিকে বেছে নিতে পারেন।

যেমনটি আমরা দেখছি, ডেটাতে খোলার, উচ্চ, নিম্ন, সমন্বয়যুক্ত ক্লোজিং এবং অন্যান্য মান রয়েছে। যাইহোক, পূর্বাভাসের জন্য, আমরা সম্ভবত সঠিক মানগুলিতে আগ্রহী নাও হতে পারি। আমাদের যা জানা দরকার তা হ'ল 'রূপান্তর' - উদাহরণস্বরূপ, যদি আগত 3 দিনের মান 25.50, 28.00, 29.00 হয় তবে চতুর্থ দিনটির মান কত হবে? এটি উপরে বা নিচে যাবে?

তবে আমাদের ডেটা উচ্চ বা নিম্নে বাছাইয়ের আগে আমাদের ঘনিষ্ঠ, উচ্চ, নিম্ন এবং ভলিউমের মানগুলির শতাংশের পরিবর্তনগুলি জানতে হবে।

শতাংশ পরিবর্তন ফাংশন এবং অন্যান্য অনেক ডেটা ম্যানিপুলেশন ফাংশন ব্যবহার করতে, আমাদের পান্ডাস প্যাকেজটি আমদানি করতে হবে।

পিডি হিসাবে পান্ডস আমদানি করুন
# শেষের ব্যবধান পান
ক্লোজ_গ্যাপ = ডেটাসেট ['ক্লোজ']। পিসিটি_চেঞ্জ ()
# তত্ক্ষণাত্ পূর্ববর্তী সারি থেকে উচ্চ শতাংশ পরিবর্তন
উচ্চ_গ্যাপ = ডেটাসেট ['উচ্চ'] p
লো_গ্যাপ = ডেটাসেট ['লো'] p পিটিটি_চেঞ্জ ()
ভলিউম_গ্যাপ = ডেটাসেট ['ভলিউম'] p
দৈনিক_চেনজ = (ডেটাসেট ['বন্ধ']] - ডেটাসেট ['ওপেন']) / ডেটাসেট ['ওপেন']
ফলাফল_নেক্সট_ডায়_ দিকনির্দেশ = (ডেটাসেট ['ভলিউম']। শিফট (-1) - ডেটাসেট ['ভলিউম'])

আসুন আমরা একটি খালি নতুন ডেটা সেট তৈরি করি এবং উপরের ডেটা সহ কিছু অন্যান্য দরকারী বিশদ সহ এটি পূরণ করি -

নতুন_ডেটসেট = []
new_dataset.append (pd.DataFrame ({ 'Close_Gap': Close_Gap,
'High_Gap': High_Gap,
'Low_Gap': Low_Gap,
'Volume_Gap': Volume_Gap,
'Daily_Change': Daily_Change,
'Outcome_Next_Day_Direction': Outcome_Next_Day_Direction}))

আসুন এখন আমাদের হিসাবে নতুন তথ্য সেট মুদ্রণ করা যাক -

মুদ্রণ (new_dataset)

আরও সুস্পষ্টতার জন্য, আসুন হেড () পদ্ধতিটি ব্যবহার করে কয়েকটি মান পেতে পারি। তবে আমাদের প্রথমে তালিকাটি ডেটাফ্রেম অবজেক্টে রূপান্তর করতে হবে।

new_dataset_df = pd.concat (new_dataset)
মুদ্রণ (new_dataset_df.head ())

আমরা সঠিক মান চাই না। আমাদের ট্রানজিশন ম্যাট্রিক্স এবং কাজ করার সম্ভাবনার জন্য আমাদের কেবলমাত্র স্থিতিশীল রাষ্ট্র। উচ্চ নিম্ন প্যাটার্নের ভিত্তিতে আমরা ভবিষ্যতের বাজারের পরিস্থিতি পূর্বাভাস দিতে পারি।

এর অর্থ হল যে আমরা মানগুলি কেবলমাত্র তিনটি বিভাগে ভাগ করতে পারি - নিম্ন, মাঝারি বা উচ্চ - বা সংক্ষেপে - এল, এম, এইচকে ডেটা বেনিং বলা হয়।

আমরা ভাগ্যবান যে পাইথনের পান্ডাস প্যাকেজটি একটি ফাংশন Qcut সরবরাহ করে যা তথ্যকে সমান আকারের বিনগুলিতে বিভক্ত করে।

# ক্লোজ_গ্যাপ
new_dataset_df ['ক্লোজ_গ্যাপ_এলএমএইচ'] = পিডি.কিউকুট (নতুন_ড্যাটাসেট_ডিএফ ['ক্লোজ_গ্যাপ'], ৩, লেবেল = ["এল", "এম", "এইচ"])
# হাই_গ্যাপ
new_dataset_df ['High_Gap_LMH'] = pd.qcut (new_dataset_df ['High_Gap'], 3, লেবেল = ["এল", "এম", "এইচ"])
# লো_গ্যাপ
new_dataset_df ['নিম্ন_গ্যাপ_এলএমএইচ'] = পিডি.ক্কুট (নতুন_ড্যাটাসেট_ডিএফ ['লো_গ্যাপ'], ৩, লেবেল = ["এল", "এম", "এইচ"])
# খণ্ড_গ্যাপ
new_dataset_df ['ভলিউম_গ্যাপ_এলএমএইচ'] = পিডি.কিউকুট (নতুন_ড্যাটাসেট_ডিএফ ['ভলিউম_গ্যাপ'], 3, লেবেল = ["এল", "এম", "এইচ"])
# প্রতিদিন_চঞ্জ
new_dataset_df ['দৈনিক_চেন্জ_এলএমএইচ'] = পিডি.কিউকুট (নতুন_ড্যাটাসেট_ডিএফ ['প্রতিদিন_চেনজ'], ৩, লেবেল = ["এল", "এম", "এইচ"])
এল, এম, এইচ এর এই তথ্যের সাহায্যে আমরা ঘনিষ্ঠ ব্যবধান, ভলিউম ব্যবধান এবং দৈনিক পরিবর্তনের এইচএলএম মানকে সম্মতি দিয়ে আমরা যে ইভেন্টের প্যাটার্নটি পেয়েছি তা খুঁজে পেতে পারি -
new_dataset_df ['ইভেন্ট_প্যাটার্ন'] = নতুন_ড্যাটাসেট_ডিএফ ['ক্লোজ_গ্যাপ_এলএমএইচ']। অ্যাস্টাইপ (টিআর) + নতুন_ড্যাটাসেট_ডিএফ ['ভলিউম_গ্যাপ_এলএমএইচ']। অ্যাস্টাইপ (আরআর) + নতুন_ডেটসেট_ডিএফ ['ডেইলি_চেনজ_এলএমএইচ']।
মুদ্রণ (new_dataset_df.tail (20)

এখন, আমরা অনেকগুলি পরিবর্তন দেখতে পাই যা এই ধরণের প্যাটার্নগুলিতে নিয়ে যায় - এলএমএল, এমএমএম, এমএইচএইচ, এমএলএইচ এবং আরও। স্ট্রিং হিসাবে ইভেন্টের সিরিজ পেতে আমাদের এই ডেটাটি সংকুচিত করি।

ডেটা সেট হ্রাস করুন, দুর্বল প্রকরণগুলি সরিয়ে কেবলমাত্র সবচেয়ে আকর্ষণীয় এবং বিশিষ্ট বৈচিত্রগুলি পেতে এটি সংকুচিত করুন।

একবার আমরা এটি পেয়ে গেলে, আমাদের প্রশিক্ষণ এবং পরীক্ষার সেটগুলিতে আমাদের ডেটা ভাগ করতে হবে। যতটা সম্ভব যথাযথভাবে মডেলটিকে প্রশিক্ষণের জন্য বেশিরভাগ ডেটা প্রশিক্ষণের সেটে যেতে হবে।

এটি স্কলারন প্যাকেজ থেকে ট্রেন_স্টেস্ট_স্প্লিট ব্যবহার করে করা যেতে পারে। আমাদের বলুন যে আমরা প্রশিক্ষণের জন্য প্রায় 80% ডেটা দেই, এভাবে পরীক্ষার জন্য 0.2 বা 20% ডেটা থাকে।

আমরা ফলাফল_সংশ্লিষ্ট_দিন_নির্দেশের (ইতিবাচক বা নেতিবাচক) উপর ভিত্তি করে ডেটা বিভক্ত করতে পারি।

সংক্ষিপ্ত_সেট_পোস = সংকুচিত_সেট [সংকুচিত_সেট ['ফলাফল_পরিচয়_দান_নির্দেশ'] == 1] ['ইভেন্ট_প্যাটার্ন']
মুদ্রণ (compressed_set_pos.shape)
সংক্ষিপ্ত_সেট_নেগ = সংকুচিত_সেট [সংকুচিত_সেট ['ফলাফল_পরিচয়_দান_নির্দেশ'] == 0] ['ইভেন্ট_প্যাটার্ন']
মুদ্রণ (compressed_set_neg.shape)

ফলাফলের দিকনির্দেশনা পাওয়ার পরে, আসুন এখন মার্কভ গ্রিডটি তৈরি করি।

  • সংকুচিত সেট থেকে অনন্য ইভেন্ট প্যাটার্নগুলি সন্ধান করুন। যেমন, এলএইচএম, এমএলএইচ ইত্যাদি…
  • From_event (উদা। এলএমএইচ) এবং টু_ভেন্ট (উদা। এমএলএম) দিয়ে একটি প্যাটার্ন গঠন করুন
  • যদি কোনও মিল খুঁজে পাওয়া যায়, তবে প্যাটার্নের মানগুলিতে যোগ দিন
  • গ্রিড এবং পিভটগুলিতে / থেকে তৈরি করুন
  • শূন্যের সাথে NaN মান পূরণ করুন
  • ইতিবাচক এবং নেতিবাচক সংকোচিত সেটগুলি দিয়ে ট্রানজিশন গ্রিড তৈরি করুন

ফলাফলটির পূর্বাভাস দেওয়া এই ম্যাট্রিক্সের উপর ভিত্তি করে সহজ। আমাদের মতবিরোধগুলি খুঁজে পেতে এবং প্রকৃত এবং পূর্বাভাসিত মানগুলির সাথে একটি বিভ্রান্তির ম্যাট্রিক্স তৈরি করতে হবে।

ম্যাট্রিক্স গ্রিড তৈরি এবং ফলাফলের পূর্বাভাস দেওয়ার কোড পাওয়ার জন্য ভাইরাল এমএমএল দ্বারা কোড লিঙ্কটি দেখুন। ভিডিওটি এমন একটি ব্লগের উপর ভিত্তি করে তৈরি করা হয়েছে যা স্টক মার্কেটের পূর্বাভাসের জন্য মার্কভ চেইন কীভাবে কাজ করে তা বিশদ করে।

উপসংহার

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