Ұсыныс жүйесіне шолу және оны нөлден қалай жүзеге асыру керек

Бұл блогта тарих, қазіргі уақыт, болашақ, оның әр түрлі категориялары, сонымен қатар әзіл-қалжың бойынша ұсыныстарды өңдеуге арналған код сияқты жүйелер шолуы бар.

Edo Nugroho фотосы Unsplash-те

Өткен шақ және болашақ:

Ұсыныс жүйесінің тарихына көз жүгіртетін болсақ, идея 1992-1996 жж. Аралығында қабылданбады. Ұсыныс жүйелері бұрын адамдар бірлескен сүзу туралы сөйлескенге дейін елестетілген болатын. Бірақ бәрі қолмен жасалды. Мысалы: сізді сафари сізге қызықтыратынын білетін туристік агент кез-келген адам жасағысы келетін нәрсені емес, сіз қалайтын сапар түріне назар аудармайды. Екінші мысал ретінде: жеке дүкендерде қарапайым өнімдер пайда болған кезде адамдар профильдерін басқаратын және жаңа өнімді алуға жақсы үміткер болатындығы туралы кім білетіндігі туралы қарапайым мәліметтер базасы болған. 2007 жылы Netflix 1 миллион долларға конкурс жариялады және ол ұсыныс жүйесінің бағытын өзгертті. Байқауға қатысуға түрлі ортадан келген адамдарды қызықтырды. Жаңа алгоритмдер жаңа математикалық формулалармен бірге пайда болды. Айтпақшы, мен әзіл-қалжың жасау үшін пайдаланатын тосын кітапхана Netflix сыйлығының жеңімпаздары жариялаған зерттеу жұмысына назар аударып, толығымен жасалған. Күткенде біз білмейтін көптеген жайттар бар. Уақытша ұсыныс мәселесі. Мен өзімнің ұсыныстарымды адамдарға тек біраз уақыт жұмыс істеген жыл мезгіліне ғана емес, сонымен қатар жүйелілікке қалай бағыттауға болады, бұны бұрын тұтынғаннан кейін не пайдаландыңыз. Білім саласына арналған ұсынымдар уақытша мәселелер болып табылады.

Ұсыныс жүйесінің кең бөлімі:

Негізінен ұсыныс жүйесінің екі санаты бар. 1. Бірлескен сүзу 2. Мазмұнға негізделген сүзу

Бірлескен сүзгілеу: Бірлескен сүзгілеудің кілті өткен уақытта келіскен адамдар болашақта келісетініне және бұрынғыдай ұнайтын элементтердің ұқсас түрлерін ұнататындығына негізделген. Бірлескен сүзудің үш негізгі категориясы: 1. Пайдаланушы-пайдаланушы ұқсастығы 2. Элементтің ұқсастығы 3. Модельге негізделген

Пайдаланушы-қолданушы мен элементтің ұқсастығы

Мазмұнға негізделген сүзу: Мазмұнға негізделген сүзу әдістері элементтің сипаттамасына және пайдаланушының қалауына байланысты болады. Бұл әдістер қолданушыда емес, белгілі бір затта (аты, орналасқан жері, сипаттамасы және т.б.) белгілі болған жағдайларға жақсы сәйкес келеді.

Бірлескен vs мазмұнға негізделген ұсыныс

Алғышарт

1.Basic Python 2.Basic pandas 3.Күнтізбелік кітапханаға қызығушылық таныту 4. Keras (міндетті емес)

Егер сіз тікелей кодтарға өтуді қаласаңыз, осы github сілтемесіне өтіп, джуптер дәптерін табыңыз.

Мен мәселені шешу барысында мен жасаған негізгі қадамдарды түсіндіремін, бірақ егер сіз мәселені толық түсіндіруге қызығушылық танытсаңыз және тосын кітапхананы пайдалану туралы білгіңіз келсе, онда сіз репо-репоға назар аударған жөн. блог.

Бастайық. Біз пайдаланатын деректер туралы кейбір негізгі ақпарат.

Деректерді сипаттау

Енді мен мәселені шешуді жоспарлап, оны шешуге бет бұрамын. Әр қадамнан кодтық үзінділермен өтеміз. 1. Мәліметтерді жинау 2. Поезд тесті бойынша бөлу 3. Қарапайым статистика 4. Деректерді күтпеген кітапхананың үйлесімді форматына құрылымдау 5. Қателіктің метрикасын анықтау 6. Негізгі модельді пайдалану 7. Әр түрлі модельдерді қолданып көріңіз 8. Нәтиже

Деректер жинау

  1. Мәліметтерде 3 парақ бар. Біз оларды біріктіріп, біріктірілген python pandas деректерін жасаймызFrame. Бізде барлығы 73421 қолданушы бар.
Барлық деректерді біріктіріңіз

2. Деректер жиынтығы туралы ақпаратта сипатталғандай 99 рейтингі қолданушы бұл әзілді бағаламады дегенді білдіреді. Біз бұл жазбаларды алып тастаймыз және ['user_id', 'joke_id', 'rating'] форматында дайындаймыз.

Деректер дайындау

Пойыздарды тестілеу

Біз scikit-learn train_test_split қолданып, деректерді 70-30 деп бөлеміз. 70% пойызға және 30% тестке қол жетімді болады

Негізгі статистика

1. Әр қолданушыға және әзілге арналған орташа рейтинг

барлық пайдаланушылардың рейтингін таратубарлық әзілдердің рейтингін тарату

Кітапхананың үйлесімді форматына қатысты мәліметтер

Біз деректерді күтпеген кітапхана бойынша құрылымдаймыз. Ол деректерді ['пайдаланушы', 'әзіл', 'рейтинг'] түрінде қабылдайды. Егер бізде фильм ұсынуға қатысты проблема туындаса, біз мәліметтерді ['пайдаланушы', 'фильм', 'рейтинг'] ретінде құрылымдаушы едік.

күтпеген кітапхана стилінде деректерді дайындау

Қате метрикасын анықтау

біз қате метрика ретінде қалыпқа келтірілген орташа абсолютті қатені қолданамыз.

Нормаланған орташа абсолюттік қате (NAME) формуласыNMAE есептеу үшін код

Базалық үлгіні қолдану

Біз күтпеген кітапхана ұсынған Базельдік модельді қолдана отырып, базалық модель құрамыз. Базалық модель 0.2033 NMAE береді, біз әртүрлі тосын модельдерді сынап көреміз және жақсы нәтижеге жету үшін барлық нәтижелерді біріктіреміз.

Әр түрлі модельдерді қолданып көріңіз

  1. KNN базалық моделі: жаңа әзілдерге қолданушылардың рейтингін болжау үшін ұқсастыққа негізделген әдісті қолданады. Біздің жағдайда NMAE қателігі - 0,966

2. XAverstationRating, jokeAverageRating, Базелдің шығуы және KNN базалық шығарылымындағы XGBoost: Біз алдыңғы тосын модельдердің барлық нәтижелерін жинадық және гипер параметрді баптағаннан кейін XGB регрессиялық моделін деректерде қолдандық. Мұнда біз 0.1928 NMAE-ден сәл жақсы нәтижеге қол жеткіземіз

3. SVD моделі: SVD моделі матрицаны аяқтау мәселесін шешу үшін матрицалық факторизация әдістерін қолданады және рейтингті болжайды.

4. XAverstationRating, jokeAverageRating, Базалық шығарылым, KNN базалық шығарылымы және SVD моделінің шығуы. Бұл модель 0,18 NMAE береді және осы уақытқа дейін ең жақсы болып табылады.

5. Мүмкіндіктері бар модель: Мен олардың модельге әсерін тексеру үшін екі оңай мүмкіндік алдым. Бір мүмкіндік - user_average + joke_avg-global_avg. Бұл модель әдеттегі NMAE сияқты 20.2 береді. Мен басқа да инженерлік техникаларды сынап көрдім. Олар да жақсы жұмыс істемеді.

6. Depp-ті керамикамен оқыту модельдері: Инженерлік жұмыс жақсы нәтиже бермейтіндіктен, мен қарапайым керамикалық нейрондық желілік модельдерді көруді жоспарлап отырмын Мен 3 түрлі модельді сынап көрдім. Пайдаланушының орташа мәні, әзілдің орташа мәні - екінші, үшінші - барлық ерекшеліктері бар, бірақ әртүрлі сәулетімен. Бір модельде 14,9% NMAE болды.

Нәтижелер

Көріп отырғанымыздай Second_NN моделі ең жақсы жұмыс істейді, өйткені ол ең аз сынақ қателігі бар.

Қорытынды ойлар

Бәрімізге белгілі, ешқандай модель мінсіз емес. Бұл модельді жетілдіруге мүмкіндік бар және әрқашан болады. Әр түрлі инженерлік техниканы, кейбір домендік сарапшылардың кеңестері мен нейрондық желілердің әртүрлі құрылымдары жақсырақ модельдерге әкелуі мүмкін.

Екінші ескерту ретінде ұсыныс жүйелері күн санап өсіп келеді деп айта аламын. Таңқаларлық кітапхана барлық танымал модельдерді іске асыра отырып, әзірлеушілердің өмірін әлдеқайда жеңілдетеді. Ұсыныстың негізгі жүйесін құру үшін бұл өте пайдалы. Мен осы блогты жазудағы мақсатымды іске асырдым деп ойлаймын және әзірлеушілерге шағын кітапханалық кіріспесі бар тосын кітапхана туралы мәлімет бердім. Барлық кодты git-те алуға болады.