ছবির ক্রেডিট: নিউজওয়্যার, টেকআউট।

কীভাবে ক্রয় ডেটা প্রস্তাবনা সিস্টেম তৈরি করবেন (ধাপে ধাপে)

টিউরিক্রিয়াট এবং পাইথনের সাথে নিবন্ধভিত্তিক সহযোগী ফিল্টারিংয়ের একটি অ্যাপ্লিকেশন

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

সুপারিশ সিস্টেমগুলি বিগ ডেটা এবং মেশিন লার্নিংয়ের অন্যতম সাধারণ, সহজেই বোঝা যায় uses সর্বাধিক জনপ্রিয় অ্যাপ্লিকেশনগুলির মধ্যে রয়েছে অ্যামাজনের সুপারিশ ইঞ্জিন, যা আমরা ওয়েবসাইটটি পরিদর্শন করার সময় আমাদের একটি ব্যক্তিগতকৃত ওয়েবপৃষ্ঠা এবং স্পোটাইফির সুপারিশ তালিকার সাথে গানগুলি শুনি যা আমরা তাদের অ্যাপের মাধ্যমে শুনি include

গতবার প্রচুর অডিও সহ একটি স্পটিফাইভার ডিসকভার সাপ্তাহিক তৈরি করতে আমাদের স্পার্ক ব্যবহার করতে হয়েছিল। এবার আমরা আরও স্পষ্ট আইটেমগুলির জন্য একটি প্রস্তাব ইঞ্জিন তৈরি করছি।

চ্যালেঞ্জ

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

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

লক্ষ

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

  • ডেটা রূপান্তর এবং স্বাভাবিককরণ normal
  • প্রশিক্ষণ মডেল
  • মডেল পারফরম্যান্স মূল্যায়ন
  • অনুকূল মডেল নির্বাচন করা

পন্যের স্বল্প বিবরনী

কল্পনা করুন যে একটি মুদি চেইন একটি নতুন মোবাইল অ্যাপ প্রকাশ করছে যা তাদের গ্রাহকদের এমনকি দোকানে যাওয়ার আগে তাদের অর্ডার দিতে দেয়।

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

সরঞ্জামটি কোনও নির্দিষ্ট ব্যবহারকারীর উপর ভিত্তি করে একটি সুপারিশ তালিকার সন্ধান করতে পারে যাতে:

  • ইনপুট: গ্রাহক সংখ্যা
  • রিটার্নস: নিবন্ধগুলির তালিকা (পণ্য আইডি) যা ব্যবহারকারী সম্ভবত তার (খালি) "শপিং কার্ট" এ রাখতে চান।

বাস্তবায়ন

1. আমদানি মডিউল

  • ডেটা ম্যানিপুলেশনের জন্য পান্ডাস এবং নম্পি
  • মডেল নির্বাচন এবং মূল্যায়নের জন্য টেরিক্রেট
  • ট্রেন এবং পরীক্ষার সেটগুলিতে ডেটা বিভক্ত করতে স্কলারন
% লোড_সেক্সট অটোরলোড% অটোরলোড 2 পিডি আমদানির হিসাবে প্যান্টগুলি এনপি হিসাবে আমদানি টাইম টুরিরিট আমদানি হিসাবে স্কিলেআর.ক্রস_ বৈধকরণ আমদানি ট্রেন_স্টেট_স্প্লিট আমদানি sys.path.append ("..")

২. ডেটা লোড করুন

সিএসভি ফর্ম্যাটে দুটি ডেটা সেট নীচে ব্যবহার করা হয়েছে, যা আপনি এখানে ডেটা ফোল্ডারে খুঁজে পেতে পারেন:

  • প্রস্তাব_1.csv আউটপুট হিসাবে প্রস্তাবিত 1000 গ্রাহক আইডির একটি তালিকা নিয়ে গঠিত
  • trx_data.csv ব্যবহারকারীর লেনদেন নিয়ে গঠিত
গ্রাহকরা = পিডি.ড্রেড_সিএসভি ('../ ডেটা / সুপারিশ_1.csv') লেনদেন = পিডি.ড্রেড_সিএসভি ('../ ডেটা / ট্রেক্স_ডাটা সিএসভি')

৩. ডেটা প্রস্তুতি

আমাদের লক্ষ্য এখানে পণ্য কলামের আইটেমগুলির প্রতিটি তালিকাকে সারিগুলিতে ভাগ করা এবং কোনও ব্যবহারকারী কেনা আইটেমের সংখ্যা গণনা করে

৩.১০। ব্যবহারকারী, উপাদান এবং লক্ষ্য ক্ষেত্রগুলি সহ ডেটা তৈরি করুন

  • এই টেবিলটি পরে আমাদের মডেলিংয়ের জন্য ইনপুট হিসাবে পরিবেশন করবে
  • এক্ষেত্রে আমাদের ব্যবহারকারীর গ্রাহকআইডি, প্রোডাক্ট আইডি এবং ক্রয়_কাউন্ট রয়েছে
ডেটা = পিডি.মেল্ট (ক্রিয়া.সেট_ইন্ডেক্স ('গ্রাহকআইডি') ['পণ্য']। প্রয়োগ করুন (পিডি.সেসরিজ)। রিসেট_ইন্ডেক্স (), আইডি_ভারস = ['গ্রাহকআইডি'], মান_নাম = 'পণ্য') drop। । ড্রপ (['পরিবর্তনশীল'], অক্ষ = 1) rouগ্রুপবি (['গ্রাহকআইডি', 'পণ্য']) \ .agg ({'পণ্য': 'গণনা'}) ren .নাম (কলামগুলি = {'পণ্য' : 'ক্রয়_কাউন্ট'}) re .reset_index () \ .নাম (কলামগুলি = {'পণ্য': 'productId'}) ডেটা ['productId'] = ডেটা ['productId']। অ্যাস্টাইপ (np.int64)

3.2। একটি ডামি তৈরি করুন

  • কোনও গ্রাহক এই জিনিসটি কিনেছেন কিনা তা চিহ্নিত করার জন্য ডামি।
  • কোনও আইটেম কেনার সময় ক্রয়_ডমিটি 1 হিসাবে চিহ্নিত করা হয়
  • এটিকে স্বাভাবিক করার পরিবর্তে ডামি তৈরি করবেন কেন? ক্রয়ের সংখ্যা সাধারণকরণ, যেমন প্রতিটি ব্যবহারকারীর দ্বারা কাজ করা হবে না কারণ বিভিন্ন ক্রয় ফ্রিকোয়েন্সি সহ গ্রাহকদের একই স্বাদ নাও থাকতে পারে। যাইহোক, আমরা বিভাগ 3.3 বর্ণিত হিসাবে সমস্ত ব্যবহারকারীর ক্রয় ফ্রিকোয়েন্সি দ্বারা আইটেমগুলি স্বাভাবিক করতে পারি। নিচে.
ডিএফ তৈরি_ডাটা_ডমি (ডেটা): ডেটা_ডমি = ডেটা কপি () ডেটা_ডমি ['ক্রয়_ডমি'] = 1 রিটার্ন ডেটা_ডমি
ডেটা_ডমি = তৈরি_ডাটা_ডমি (ডেটা)

3.3। সমস্ত ব্যবহারকারীর জন্য উপাদান মানগুলি স্বাভাবিক করুন

  • এটি করতে, প্রথমে নীচে ব্যবহারকারী-আইটেম ম্যাট্রিক্স তৈরি করে সমস্ত ব্যবহারকারীর জন্য প্রতিটি আইটেমের ক্রয় ফ্রিকোয়েন্সিটিকে স্বাভাবিক করুন
df_matrix = pd.pivot_table (ডেটা, মানসমূহ = 'ক্রয়_কাউন্ট', সূচক = 'গ্রাহকআইডি', কলামগুলি 'প্রোডাক্টআইডি')
df_matrix_norm = (df_matrix-df_matrix.min ()) / (df_matrix.max () - df_matrix.min ())
# মডেলিংয়ে ইনপুট দেওয়ার জন্য একটি সারণী তৈরি করুন
d = df_matrix_norm.reset_index () d.index.names = ['স্কেলড_পুরચેজ_ফ্রেইক'] ডেটা_নর্ম = পিডি.মেল্ট (ডি, আইডি_ভারস = ['গ্রাহকআইডি'], মান_নাম = 'স্কেলড_পুরচেস_ফ্রেইক')। ড্রপনা ()
মুদ্রণ (ডেটা_নর্ম.শ্যাপ) ডেটা_নর্ম.হেড ()

উপরের পদক্ষেপগুলি নীচে সংজ্ঞায়িত কোনও ফাংশনে একত্রিত করা যেতে পারে:

ডিএফ নরমালাইজডেটা (ডেটা): ডিএফ_ম্যাট্রিক্স = পিডি.পিভোট_টেবিল (ডেটা, মানসমূহ = 'ক্রয়_কাউন্ট', সূচক = 'গ্রাহকআইডি', কলাম = 'প্রোডাক্টআইডি') ডিএফ_ম্যাট্রিক্স_মেনার () ডিএফ_ম্যাট্রিক্স-ডিএফ_ম্যাট্রিক্স.মিন () / (ডিএফ_ম্যাট্রিক্স.ম্যাক্স) - df_matrix.min ()) d = df_matrix_norm.reset_index () d.index.names = ['স্কেলড_প্রেসেস_ফ্রেইক'] পিডি.মেল্ট (ডি, আইডি_ভারস = ['গ্রাহকআইডি'], মান_নাম = 'স্কেলড_পুরচেস_ফ্রেইক')। ড্রপনা ()

এই পদক্ষেপে, আমরা 0 থেকে 1 পর্যন্ত ক্রয়ের ইতিহাসকে স্বাভাবিক করেছি (যেখানে 1 কোনও আইটেমের জন্য সর্বাধিক সংখ্যক ক্রয় এবং 0 টি সেই আইটেমটির ক্রয়ের সংখ্যা)।

4. স্প্লিট ট্রেন এবং পরীক্ষা সেট

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

নীচে একটি বিতরণ ফাংশন সংজ্ঞায়িত করা যাক।

Def split_data (ডেটা): '' 'ডেটা সেট করে একটি প্রশিক্ষণ এবং পরীক্ষা সেট। যুক্তি: ডেটা (প্যান্ডাস.ডাটা ফ্রেম) ট্রেন_ডাটা (tc.SFrame) টেস্ট_ডাটা (tc.SFrame) '' 'ট্রেন, পরীক্ষা = ট্রেন_টেষ্ট_স্প্লিট (ডেটা, টেস্ট_সাইজ = .2) ট্রেন_ডেটা = tc.S ফ্রেম (ট্রেন) টেস্ট_ডাটা = টিসি। এসফ্রেম (পরীক্ষা) ট্রেন ফেরত_ডাটা, টেস্ট_ডেটা

এখন আমাদের কাছে ক্রয়ের নম্বর, ক্রয় ডামি মান এবং মজাদার ক্রয়ের সংখ্যা সহ তিনটি ডেটা সেট রয়েছে, আমরা তাদের মডেলিংয়ের জন্য আলাদা করতে চাই।

ট্রেন_ডেটা, টেস্ট_ডাটা = স্প্লিট_ডেটা (ডেটা) ট্রেন_ডাটা_ডমি, টেস্ট_ডাটা_ডমি = স্প্লিট_ডাটা (ডেটা_ডমি) ট্রেন_ডেটা_নরম, টেস্ট_ডাটা_নর্ম = স্প্লিট_ডাটা (ডাটা_নরম)

৫. টুরিক্রিয়েট লাইব্রেরি ব্যবহার করে মডেলগুলি সংজ্ঞায়িত করুন

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

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

ক্ষেত্রের নামগুলি সংজ্ঞায়িত করার জন্য # ধ্রুবক ভেরিয়েবলগুলির মধ্যে রয়েছে:
ইউজার_আইডি = 'গ্রাহকআইডি' আইটেম_আইডি = 'প্রোডাক্ট আইডি' ব্যবহারকারী_ টো-রিসিপশন = তালিকা (গ্রাহক [ব্যবহারকারী_আইডি]) এন_রেক = 10 # আউটপুট ডেটা রেকর্ডে প্রথম লাইনগুলি প্রদর্শনের জন্য n_display = 30 # প্রস্তাবিত আইটেমের সংখ্যা

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

ডিএফ মডেল (ট্রেন_ডেটা, নাম, ব্যবহারকারী_আইডি, আইটেম_আইডি, লক্ষ্য, ব্যবহারকারী_ টো-রিসিকিউশন, এন_আরসি, এন_ডিসপ্লে): যদি নাম == 'জনপ্রিয়তা': মডেল = tc.popularity_rec सुझावer.create (ট্রেন_ডেটা, ব্যবহারকারী_আইডি = ব্যবহারকারী_আইডি, আইটেম_আইডি = লক্ষ্য_ লক্ষ্য) এলিফ নাম == 'কোসাইন': মডেল = tc.item_siversityity_rec सुझावer.create (ট্রেন_ডেটা, ইউজার_আইডি = ইউজার_আইডি, আইটেম_আইডি = আইটেম_আইডি, গোল = গোল, মিলিটি_ টাইপ = 'কোসাইন')
এলিফ নাম == 'পিয়ারসন': মডেল = tc.item_siversityity_rec सुझावer.create (ট্রেন_ডেটা, ইউজার_আইডি = ইউজার_আইডি, আইটেম_আইডি = আইটেম_আইডি, টার্গেট = টার্গেট, মিলিটি_ টাইপ = 'পিয়ারসন') রিকোম = মডেল.প্রকার (ব্যবহারকারীগণ = ব্যবহারকারী_ত_পরিচালনা, কে = এন_আরেক) recom.print_rows (n_display) রিটার্ন মডেল

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

6. একটি ভিত্তি হিসাবে জনপ্রিয়তা মডেল

  • জনপ্রিয়তার মডেলটি সর্বাধিক জনপ্রিয় নিবন্ধগুলিকে সুপারিশ হিসাবে গ্রহণ করে। এই আইটেমগুলি গ্রাহকদের সর্বাধিক সংখ্যক বিক্রয় সহ এমন পণ্য।
  • প্রশিক্ষণের ডেটা মডেল নির্বাচনের জন্য ব্যবহৃত হয়

আই। ক্রয় গণনা ব্যবহার করুন

নাম = 'জনপ্রিয়তা' টার্গেট = 'ক্রয়_কাউন্ট' জনপ্রিয়তা = মডেল (ট্রেন_ডেটা, নাম, ব্যবহারকারী_আইডি, আইটেম_আইডি, লক্ষ্য, ব্যবহারকারীদের_পরিচালনা, এন_সেক, এন_ডিসপ্লে)

ii। ক্রয় ডামি ব্যবহার করুন

নাম = 'জনপ্রিয়তা' টার্গেট = 'ক্রয়_ডমি' পপ_ডমি = মডেল (ট্রেন_ডেটা_ডমি, নাম, ইউজার_আইডি, আইটেম_আইডি, টার্গেট, ইউজার_ট_ রিসিপশন, এন_রেক, এন_ডিসপ্লে)

iii। ক্রয়ের সংখ্যা বাড়িয়ে দিন

নাম = 'জনপ্রিয়তা' টার্গেট = 'স্কেলড_প্রেসেস_ফ্রেইক' পপ_নর্ম = মডেল (ট্রেন_ডেটা_নর্ম, নাম, ইউজার_আইডি, আইটেম_আইডি, টার্গেট, ইউজার_ট_রেসিপেন্ডার, এন_রেক, এন_ডিসপ্লে)

.1.১০। বেসলাইন সংক্ষিপ্তসার

  • মডেলটি তৈরির পরে, আমরা সুপারিশের পয়েন্টগুলি পূর্বাভাস দেওয়ার জন্য জনপ্রিয়তার স্কোরগুলি ব্যবহার করি। আপনি উপরের প্রতিটি মডেলের ফলাফল দেখতে পাচ্ছেন, সারিগুলি 10 টি সুপারিশ সহ 1000 ব্যবহারকারীদের প্রথম 30 টি রেকর্ড দেখায়। এই 30 টি রেকর্ডে 3 জন ব্যবহারকারী এবং তাদের প্রস্তাবিত আইটেমগুলি, এবং আরও পয়েন্ট এবং উত্থানের স্থানগুলি রয়েছে।
  • যদিও বিভিন্ন মডেলের বিভিন্ন সুপারিশ তালিকা রয়েছে, প্রতিটি ব্যবহারকারীর একই 10-আইটেমের তালিকার জন্য প্রস্তাবিত। এটি কারণ যে সমস্ত ব্যবহারকারীর সর্বাধিক জনপ্রিয় আইটেমগুলি বিবেচনায় রেখে জনপ্রিয়তা গণনা করা হয়।
  • নিম্নলিখিত গ্রুপিং উদাহরণগুলির মধ্যে একটিতে, পণ্যসমূহ 132, 248, 37 এবং 34 গ্রাহকদের মধ্যে সর্বাধিক জনপ্রিয় (সর্বাধিক বিক্রয়)। গ্রাহকদের সংখ্যায় বিভক্ত ক্রয়ের পণ্যগুলির উপর ভিত্তি করে আমরা দেখতে পাচ্ছি যে এই পণ্যগুলি প্রশিক্ষণ লেনদেনের তুলনায় গড়ে কমপক্ষে তিন বার কেনা হয়েছিল (ক্রয়_কাউন্টের ভেরিয়েবলের জনপ্রিয়তার প্রথম পরিমাপের সাথে মিলে)।

7. সহযোগী ফিল্টার মডেল

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

7.1। পদ্ধতি

ব্যবহারকারীদের মধ্যে সাদৃশ্য নির্ধারণ করতে আমরা নিম্নলিখিত পদক্ষেপগুলি ব্যবহার করি:

১. এমন একটি ব্যবহারকারী উপাদান ম্যাট্রিক্স তৈরি করুন যাতে সূচীর মানগুলি অনন্য গ্রাহক আইডি এবং কলামের মানগুলি অনন্য পণ্য আইডি উপস্থাপন করে

২. নিবন্ধ থেকে নিবন্ধের মিলের ম্যাট্রিক্স তৈরি করুন। ধারণাটি হ'ল এক পণ্যটির সাথে অন্য পণ্যটির তুলনায় কতটা মিল। এটি গণনা করার বিভিন্ন উপায় রয়েছে। .2.২ এবং .3.৩ পদক্ষেপে আমরা কোসাইন বা পিয়ারসনের মিলের পরিমাপ ব্যবহার করি।

  • এক্স এবং ওয়াই পণ্যগুলির মধ্যে সাদৃশ্য গণনা করতে, উভয় পণ্যকে রেট দেওয়া সমস্ত গ্রাহকের দিকে তাকান। উদাহরণস্বরূপ, এক্স এবং ওয়াই উভয়কেই গ্রাহকরা 1 এবং 2 দ্বারা রেট করেছেন।
  • তারপরে আমরা দুটি আইটেম ভেক্টর তৈরি করব, আইটেম এক্সের জন্য v1 এবং আইটেম ওয়াইয়ের জন্য ভি 2, (1, 2) এর ইউজার স্পেসে এবং পরে এই ভেক্টরগুলির মধ্যে কোসাইন বা পিয়ারসন এঙ্গেল / দূরত্ব খুঁজে পাই। 1 এর কোসাইন মান সহ একটি শূন্য কোণ বা ওভারল্যাপিং ভেক্টরগুলি বোঝায় সম্পূর্ণ মিল (বা ব্যবহারকারী হিসাবে, সমস্ত উপাদানগুলির একই রেটিং রয়েছে), এবং 90 ডিগ্রির কোণটি 0 বা কোনও মিলের কোজাইনকে বোঝায়।

৩. প্রতিটি গ্রাহকের জন্য, আমরা তখন তাদের যে পণ্যগুলি কিনে নি তার জন্য পণ্য (বা তাদের ক্রয়ের সংখ্যা) কেনার সম্ভাবনা পূর্বাভাস করি।

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

7.2। কোসিন মিল

  • সাদৃশ্য হ'ল এ এবং বি এর আইটেম ভেক্টরগুলির দুটি ভেক্টরের মধ্যবর্তী কোণের কোসাইন is
  • এটি নিম্নলিখিত সূত্র দ্বারা সংজ্ঞায়িত করা হয়
  • ভেক্টরগুলি যত বেশি কাছাকাছি হবে তত ছোট কোণ এবং বৃহত্তর কোসাইন

আই। ক্রয় গণনা ব্যবহার করুন

নাম = 'কোসাইন' টার্গেট = 'ক্রয়_কাউন্ট' কোস = মডেল (ট্রেন_ডেটা, নাম, ব্যবহারকারীর আইডি, আইটেম_আইডি, লক্ষ্য, ব্যবহারকারী_ টো_প্রকার, n_rec, এন_ডিসপ্লে)

ii। ক্রয় ডামি ব্যবহার করুন

নাম = 'কোসাইন' টার্গেট = 'ক্রয়_ডমি' কোস_ডমি = মডেল (ট্রেন_ডেটা_ডমি, নাম, ইউজার_আইডি, আইটেম_আইডি, টার্গেট, ইউজার_ট_সেকর্ড, এন_রেক, এন_ডিসপ্লে)

iii। ক্রয়ের সংখ্যা বাড়িয়ে দিন

নাম = 'কোসাইন' টার্গেট = 'স্কেলড_পুরચેজ_ফ্রেইক' কোস_নর্ম = মডেল (ট্রেন_ডেটা_নর্ম, নাম, ইউজার_আইডি, আইটেম_আইডি, টার্গেট, ইউজার_ট_রেসিপেন্ডার, এন_রেক, এন_ডিসপ্লে)

7.3। পিয়ারসনের সাদৃশ্য

  • দুটি ভেক্টরের মধ্যে পিয়ারসন সহগ হিসাবে মিল রয়েছে।
  • এটি নিম্নলিখিত সূত্র দ্বারা সংজ্ঞায়িত করা হয়

আই। ক্রয় গণনা ব্যবহার করুন

নাম = 'পিয়ারসন' টার্গেট = 'ক্রয়_কাউন্ট' পিয়ার = মডেল (ট্রেন_ডেটা, নাম, ব্যবহারকারীর আইডি, আইটেম_আইডি, লক্ষ্য, ব্যবহারকারী_ টো_রেকেন্ডার, এন_রেক, এন_ডিসপ্লে)

ii। ক্রয় ডামি ব্যবহার করুন

নাম = 'পিয়ারসন' টার্গেট = 'ক্রয়_ডমি' পিয়ার_ডমি = মডেল (ট্রেন_ডেটা_ডমি, নাম, ইউজার_আইডি, আইটেম_আইডি, টার্গেট, ইউজার_ট_সেকর্ড, এন_রেক, এন_ডিসপ্লে)

iii। ক্রয়ের সংখ্যা বাড়িয়ে দিন

নাম = 'পিয়ারসন' টার্গেট = 'স্কেলড_পুরচেজ_ফ্রেইক' পিয়ার_নর্ম = মডেল (ট্রেন_ডেটা_নর্ম, নাম, ইউজার_আইডি, আইটেম_আইডি, টার্গেট, ইউজার_ট_রেসিপোরেশন, এন_রেক, এন_ডিসপ্লে)

8. মডেল মূল্যায়ন

সুপারিশ ইঞ্জিনগুলির মূল্যায়নের জন্য আমরা আরএমএসই এবং যথার্থ-রিকাল ধারণাটি ব্যবহার করতে পারি।

আই। আরএমএসই (রুট গড় স্কোয়ার ত্রুটি)

  • পূর্বাভাসিত মানগুলির ত্রুটি পরিমাপ করে
  • আরএমএসই মানটি যত কম হবে ততই সুপারিশগুলি তত ভাল

ii। স্মরণ করুন

  • কোন ব্যবহারকারী কত শতাংশ পণ্য কিনে তা প্রস্তাবিত হয়?
  • যদি কোনও গ্রাহক 5 টি পণ্য ক্রয় করেন এবং তাদের মধ্যে সুপারিশ 3 টি দেখায় তবে পুনরায় কল করা 0.6

iii। নির্ভুলতা

  • ব্যবহারকারী আসলে কতগুলি বৈশিষ্ট্যযুক্ত আইটেম পছন্দ করেছেন?
  • যদি গ্রাহককে 5 টি পণ্য প্রস্তাব দেওয়া হয়, যার মধ্যে তারা 4 টি কিনে দেবে, যথার্থতা 0.8 হয়

কেন পুনরুদ্ধার এবং নির্ভুলতা গুরুত্বপূর্ণ?

  • এমন কোনও ক্ষেত্রে কল্পনা করুন যেখানে আমরা সমস্ত পণ্য সুপারিশ করি যাতে আমাদের গ্রাহকরা তাদের পছন্দসই এবং কেনা আইটেমগুলি আবরণে নিশ্চিত হন। এক্ষেত্রে আমাদের কাছে 100% কলব্যাক! তার মানে কি আমাদের মডেলটি ভাল?
  • আমাদের যথাযথতা আমলে নিতে হবে। যদি আমরা 300 টি আইটেম প্রস্তাব করি তবে ব্যবহারকারী কেবল 3 টি পছন্দ করে এবং কেবল 3 টি কিনে, যথার্থতা 0.1%! এই খুব কম নির্ভুলতা ইঙ্গিত দেয় যে মডেলটি দুর্দান্ত স্মরণ করার পরেও বিশেষত ভাল করছে না।
  • আমাদের লক্ষ্য অবশ্যই পুনরুদ্ধার এবং যথার্থতা উভয়ই অনুকূল করতে হবে (যতটা সম্ভব 1 এর কাছাকাছি হওয়া)।

প্রথমে আসুন মডেল মূল্যায়নের জন্য কলযোগ্য ভেরিয়েবলগুলি তৈরি করা যাক:

মডেল_ডো_ অ্যাকাউন্টস = [জনপ্রিয়তা_মোডেল, কোস, নাশপাতি] মডেল_ও_ডমি = [পপ_ডমি, কোস_ডমি, পিয়ার_ডমি] মডেল_ও_নর্ম = [পপ_নর্ম, কোস_নর্ম, পিয়ার_নর্ম]
নাম_ডো_ অ্যাকাউন্টস = ['ক্রয়ের সংখ্যার জনপ্রিয়তা মডেল', 'ক্রয় সংখ্যার জন্য কোসিন-মিল' ',' ক্রয় সংখ্যার জন্য পিয়ারসন-মিল '] নাম_উ_ডমি = ["ক্রয় ডামির জনপ্রিয়তার মডেল", "ক্রয় ডামির জন্য কোসাইন-সাদৃশ্য", "পিয়ারসনের মিল) ক্রয় ডামির জন্য "] নাম_w_norm = ['মজুদযুক্ত ক্রয়ের সংখ্যার জনপ্রিয়তা মডেল', 'মজাদার ক্রয় সংখ্যার জন্য কোসিনের মিল', 'ছোট আকারের ক্রয় সংখ্যার জন্য পিয়ারসনের মিল']

আসুন আমরা আরএমএসই এবং নির্ভুলতা প্রত্যাহার বৈশিষ্ট্যগুলির উপর ভিত্তি করে তৈরি করেছি এমন সমস্ত মডেলগুলির তুলনা করি:

eval_counts = tc.rec सुझावer.util.compare_models (টেস্ট_ডেটা, মডেল_ও_কাউন্টস, মডেল_নাম = নাম_ও_ অ্যাকাউন্ট)
eval_dummy = tc.rec सुझावer.util.compare_models (টেস্ট_ডেটা_ডমি, মডেল_ও_ডমি, মডেল_নাম = নাম_ও_ডমি)
eval_norm = tc.rec सुझावer.util.compare_models (টেস্ট_ডেটা_নরম, মডেল_ও_নর্ম, মডেল_নাম = নাম_ও_নরম)

8.1। মূল্যায়ন আউটপুট

  • আরএমএসই-এর ভিত্তিতে
  • নির্ভুলতা এবং পুনরুদ্ধারের উপর ভিত্তি করে

8.2। মূল্যায়ন সংক্ষিপ্তসার

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

9. চূড়ান্ত সংস্করণ

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

আমাদের পুরো ডেটা সেটটি প্রথমে আবার মডেলটি চালাতে হবে, কারণ ট্রেনের ডেটা সহ আমরা একটি চূড়ান্ত মডেলটিতে এসেছি যা পরীক্ষার সেট দিয়ে মূল্যায়ন করা হয়েছিল।

চূড়ান্ত_মোডেল = tc.item_siversityity_rec सुझावer.create (tc.SFrame (ডেটা_নর্ম), ব্যবহারকারী_আইডি = ব্যবহারকারী_id, আইটেম_আইডি = আইটেম_আইডি, লক্ষ্য = 'ক্রয়_ডমি', মিল_তাই টাইপ = 'কোসাইন')
recom = final_model.rec सुझाव (ব্যবহারকারীগণ = ব্যবহারকারীগণ_তো_পরিদর্শক, কে = এন_আরসি) recom.print_rows (n_display)

9.1। সিএসভি আউটপুট ফাইল

এখানে আমরা আমাদের ফলাফলকে একটি সিএসভি আউটপুটে রূপান্তর করতে চাই। আসুন দেখুন আমাদের কী আছে:

df_rec = recom.to_dataframe () মুদ্রণ (df_rec.shape) df_rec.head ()

আসুন একটি পছন্দসই আউটপুট উত্পাদন করতে একটি ফাংশন সংজ্ঞায়িত:

ডিএফ তৈরি_আউটপুট (মডেল, ব্যবহারকারীগণ_ত_পরিদর্শক, এন_আরেক, প্রিন্ট_সিএসভি = সত্য): পুনঃসংশোধন = মডেল.রেসিফারেন্স (ব্যবহারকারী = ব্যবহারকারী_ টো-রেকর্ডার, কে = এন_আরসি) ডিএফ_আরেক = পুনঃব্যবস্থা। [আইটেম_আইডি] \। ট্রান্সফর্ম (ল্যাম্বদা এক্স: '|' .জাইন (x.astype (str))) df_output = df_rec [['গ্রাহকআইডি', 'প্রস্তাবিত পণ্য']]] ড্রপ_ডুপ্লিকেট () ort .সোর্ট্ট_ভ্যালু ('গ্রাহকআইডি')। set_index ('গ্রাহকআইডি') যদি মুদ্রণ_সিএসভি: df_output.to_csv ('../ আউটপুট / অপশন 1_rec सुझावation.csv') মুদ্রণ ("একটি আউটপুট ফাইল 'আউটপুট' ফোল্ডারে অবস্থিত 'অপশন 1_rec सुझावation.csv'" নামের সাথে) df_output থেকে ফিরে আসে

আসুন নীচের আউটপুটটি প্রিন্ট করুন এবং সেট প্রিন্ট_সিএসভি সেট করুন সত্য। এইভাবে আমরা আক্ষরিক অর্থে আউটপুট ফাইলটি সিএসভিতে মুদ্রণ করতে পারি যা আপনি এখানেও খুঁজে পেতে পারেন।

ডিএফ_আউটপুট = তৈরি_আউটপুট (নাশপাতি_নরম, ব্যবহারকারীগণ_ত_প্রদর্শন, এন_আরেক, মুদ্রণ_সিএসভি = সত্য) মুদ্রণ (df_output.shape) df_output.head ()

9.2। গ্রাহকের সুপারিশ ফাংশন

একটি নির্দিষ্ট ফাংশন সংজ্ঞায়িত করুন যা নির্দিষ্ট গ্রাহক আইডি সহ একটি সুপারিশ তালিকার প্রত্যাবর্তন করে:

ডিএফ গ্রাহক_আরপন্থীকরণ (গ্রাহক_আইডি): গ্রাহক_আইডি যদি ডিএফ_আউটপুট.ইনডেক্সে না থাকে: মুদ্রণ করুন ('গ্রাহক পাওয়া যায়নি।') রিটার্ন গ্রাহক_আইডি ফিরে আসুন

বিঙ্গো!

সারসংক্ষেপ

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

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

আমরা আশা করি আপনি এই নিবন্ধটি পড়া উপভোগ করবেন এবং এখন আপনার নিজের "অ্যাড-টু-কার্ট" বোতামটি তৈরি করতে প্রস্তুত। আপনি তাদের আরও পড়তে চাইলে দয়া করে 50 টি তালি দিন এবং নীচে মন্তব্য করুন :) হ্যাকিং উপভোগ করুন!

মুরিসা একটি মিশন চালিত ডেটা বিজ্ঞানী এবং সামাজিক উদ্যোগ উত্সাহী। ডিসেম্বর 2017 সালে তিনি কলম্বিয়া বিশ্ববিদ্যালয় থেকে ডেটা সায়েন্স এবং মেশিন লার্নিংয়ের একটি ডিগ্রি নিয়ে স্নাতক হন। তিনি আশা করেন যে তিনি দিন দিন বিশ্বকে আরও উন্নত করতে তার দক্ষতা ব্যবহার করতে পারেন।