
Nous avons Ă©tĂ© confrontĂ©s Ă la tĂąche d'identifier des groupes de clients ayant le mĂȘme comportement d'investissement lors de transactions sur des marchĂ©s de titres organisĂ©s.
Pour une solution efficace au problÚme, il est tout d'abord nécessaire de déterminer sa formulation correcte.
, . «» . â , . , , , . , !
, :
,
( )
(/).
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

, , , â , , , .
Sur la base des travaux effectuĂ©s, nous pouvons conclure que, malgrĂ© le fait que les mĂ©thodes pour trouver des opĂ©rations clients similaires sont diffĂ©rentes et utilisent des mĂ©thodes mathĂ©matiques diffĂ©rentes, la conclusion est Ă peu prĂšs similaire. Cela signifie que l'une des mĂ©thodes peut ĂȘtre utilisĂ©e pour restreindre la recherche d'opĂ©rations similaires. Reste la question du choix d'un outil plus pratique pour une tĂąche spĂ©cifique - sacrifier la vitesse pour des raisons de commoditĂ© ou rechercher soi-mĂȘme l'application des distances trouvĂ©es. Tu dĂ©cides!