Kami dihadapkan pada tugas untuk mengidentifikasi kelompok klien yang memiliki perilaku investasi yang sama ketika melakukan transaksi di pasar sekuritas yang terorganisir.
Untuk solusi yang efektif untuk masalah ini, pertama-tama, perlu ditentukan formulasi yang benar.
, . «» . β , . , , , . , !
, :
,
( )
(/).
2 , , , , . β !
:
from matplotlib import pyplot as plt
from mpl_toolkits import mplot3d
fig = plt.figure()
ax = plt.axes(projection = '3d')
ax.scatter3D(X[:,0],X[:,1],X[:,2])
plt.show()
2 SKlearn ML β KMeans, DBSCAN () BallTree.
DBSCAN
DBSCAN (Density-based spatial clustering of applications with noise), ), , . β Ο΅- . , , , DBSCAN ? .
:
, , , . , , :
X = df[['ORDERDATETIME','SECURCODE','OPERATION']].values
model = DBSCAN(min_samples=2, eps = 0.5).fit(X)
df['LabelsDBS'] = model.labels_
df['ORDERDATETIME']=pd.to_datetime(df['ORDERDATETIME'])
gr=df.groupby(['LabelsDBS','CLIENTCODE']).count()
l=[]
ll=[]
for i in range(gr.shape[0]):
l.append(gr.index[i][0])
ll.append(gr.index[i][1])
l=pd.DataFrame(l)
l.rename(columns={0:'Ind'}, inplace=True)
l['Code']=ll
l=l.query('Ind > 0')
a = l.groupby('Ind').count()
a=a.query('Code>1 & Code<4').index.values
a=list(a)
l=l.query('Ind == @a')
l = pd.DataFrame(l.groupby('Ind')['Code'].apply(list))
, DBSCAN , .
KMeans
k- . k β , . , .
β , X. , .
β , , . , β Β« k-Β».
, , k- n- 1. . .. , , . .
, DBSCAN ( ) :
X = df[['ORDERDATETIME','SECURCODE','OPERATION']].values
model = KMeans(n_clusters=9900).fit(X)
, , β .
BallTree
ML β . . , , , .
, :
tree = BallTree(X, leaf_size=2)
dist, ind = tree.query(X, k=2)
l=[]
ll=[]
lll=[]
dist, ind = tree.query(X, k=2)
for i, (ind, d) in enumerate(zip(ind, dist)):
print(f'Y index {i}, closest index X is {ind[1]}, dist {d[1]}')
l.append(ind[0])
ll.append(ind[1])
lll.append(d[1])
for i in range(len(l)):
l[i]=df.iloc[l[i]].CLIENTCODE
ll[i]=df.iloc[ll[i]].CLIENTCODE
l=pd.DataFrame(l)
l.rename(columns={0:'Ind1'}, inplace=True)
l['Ind2']=ll
l['DIST']=lll
l = l.query('DIST>0 & Ind1 != Ind2')
l
, , , β , , , .
Berdasarkan pekerjaan yang dilakukan, kami dapat menyimpulkan bahwa, meskipun metode untuk menemukan operasi pelanggan yang serupa berbeda dan menggunakan metode matematika yang berbeda, kesimpulannya hampir sama. Ini berarti bahwa salah satu metode dapat digunakan untuk mempersempit pencarian untuk operasi serupa. Masih ada pertanyaan tentang memilih alat yang lebih nyaman untuk tugas tertentu - mengorbankan kecepatan demi kenyamanan atau untuk mencari penerapan jarak yang ditemukan sendiri. Kamu putuskan!