Rekomendacijų sistema
Portfolio

Produktų Rekomendacijų sistema

Norint sukurti „Content-based Filtering“ rekomendacijų sistemą naudojant mašininį mokymąsi, galima panaudoti „pandas“ ir mašininio mokymosi modelį, pavyzdžiui, KNN (k arčiausių kaimynų algoritmą). Ši sistema rekomenduos panašius produktus remdamasi jų savybėmis. Parodysiu pavyzdį, kaip tai įgyvendinti.

  1. Duomenų ruošimas Įsivaizduokime, kad turime informaciją apie įvairius produktus, įskaitant jų savybes (pvz., spalvą, kainą ir kt.), ir naudotojų įvertinimus.
import pandas as pd

# Sukuriame produktų duomenis su jų savybėmis
data = {'Product_ID': ['TVA', 'CAMB', 'CAMC', 'SALDD', 'MIKRE', 'CAMD'],
'Color': ['Black', 'Blue', 'Green', 'Red', 'Blue', 'White'],
'Price': [19.99, 29.99, 15.99, 9.99, 12.99, 10.90],
'Category': ['Televizorius', 'Kamera', 'Kamera', 'Saldytuvas', 'Mikrobange', 'Kamera']}

df = pd.DataFrame(data)

print("Product Data:")
print(df)

Product Data:
Product_ID Color Price Category
0 TVA Black 19.99 Televizorius
1 CAMB Blue 29.99 Kamera
2 CAMC Green 15.99 Kamera
3 SALDD Red 9.99 Saldytuvas
4 MIKRE Blue 12.99 Mikrobange
5 CAMD White 10.90 Kamera

  1. Tekstinių savybių pavertimas skaitiniais duomenimis Norėdami naudoti mašininį mokymąsi, turime paversti tekstines savybes į skaitinius duomenis. Naudosime „One-Hot Encoding“ techniką.
# Tekstines savybes paverčiame į skaitines su One-Hot Encoding
df_encoded = pd.get_dummies(df, columns=['Color', 'Category'])

print("Koduoti Produktu Duomenys:")
print(df_encoded)

Encoded Product Data:
Product_ID Price Color_Black Color_Blue Color_Green Color_Red \
0 TVA 19.99 True False False False
1 CAMB 29.99 False True False False
2 CAMC 15.99 False False True False
3 SALDD 9.99 False False False True
4 MIKRE 12.99 False True False False
5 CAMD 10.90 False False False False

Color_White Category_Kamera Category_Mikrobange Category_Saldytuvas \
0 False False False False
1 False True False False
2 False True False False
3 False False False True
4 False False True False
5 True True False False

Category_Televizorius
0 True
1 False
2 False
3 False
4 False
5 False

  1. Produkto panašumų skaičiavimas Naudosime k arčiausių kaimynų algoritmą (KNN), kuris suras produktus, panašius į norimą produktą, remiantis jų savybėmis.

KNN su Sklearn

#%pip install sklearn

from sklearn.neighbors import NearestNeighbors
#import numpy as np

# Sukuriame savybių masyvą be Product_ID stulpelio
X = df_encoded.drop('Product_ID', axis=1).values

# Naudojame KNN algoritmą su 3 artimiausiais kaimynais
knn = NearestNeighbors(n_neighbors=3, algorithm='auto')
knn.fit(X)

# Funkcija, kuri rekomenduos panašius produktus
def recommend_similar_products(product_id, df, knn):
# Randame produkto indeksą
product_index = df[df['Product_ID'] == product_id].index[0]

# Randame artimiausius kaimynus
distances, indices = knn.kneighbors([X[product_index]])

# Grąžiname rekomenduojamus produktus
similar_products = df.iloc[indices[0]]['Product_ID'].values
return similar_products

# Rekomenduojame produktus, panašius į produktą 'CAMB'
recommended = recommend_similar_products('CAMB', df_encoded, knn)
print("\nRekomenduojami Produktai Panašūs į 'CAMB':")
print(recommended)

Rekomenduojami Produktai Panašūs į 'CAMB':
['CAMB' 'TVA' 'CAMC']

  1. Paaiškinimas: KNN algoritmas: Naudojamas ieškoti artimiausius produktus pagal savybes. One-Hot Encoding: Paverčia kategorines savybes į skaitines vertes, kurias KNN gali naudoti. recommend_similar_products: Ši funkcija naudoja KNN algoritmą rasti artimiausius produktus.
  2. Rezultatai Sistema suras produktus, panašius į produktą „CAMB“, remiantis jo spalva, kaina ir kategorija. Kuo daugiau turime savybių, tuo tikslesnės bus rekomendacijos.

Reziumė: Naudojant „Content-based Filtering“ kartu su KNN modeliu galima sukurti rekomendacijų sistemą, kuri rekomenduoja panašius produktus, remdamasi jų savybėmis, o ne naudotojų elgesiu. Tai naudingas būdas kurti personalizuotas rekomendacijas, kai neturime daug naudotojų duomenų, bet turime daug informacijos apie produktus.

Leave a Reply

Your email address will not be published. Required fields are marked *