Construire un portefeuille de crypto-actifs puissant avec des stratégies multifactorielles : prétraitement des données

Préambule

Dans la dernière partie du livre, nous avons publié le premier article de la série « Building a Strong Crypto Asset Portfolio with Multi-Factor Strategies » - Theoretical Fundamentals, et c’est le deuxième article - Data Preprocessing.

Les données doivent être traitées avant/après le calcul des données factorielles, et avant que la validité du facteur unique ne soit testée. Le prétraitement spécifique des données implique le traitement des valeurs dupliquées, des valeurs aberrantes/des valeurs manquantes/des valeurs extrêmes, de la normalisation et de la fréquence des données.

I. Valeurs dupliquées

Définitions relatives aux données :

  • Clé : Indique un index unique. Eg. Pour une donnée avec toutes les dates de tous les jetons, la clé est « token_id/contract_address - date »
  • Valeur : L’objet qui est indexé par la clé est appelé la « valeur ».

Pour diagnostiquer les valeurs dupliquées, il faut d’abord comprendre à quoi « devraient » ressembler les données. Habituellement, les données se présentent sous la forme de :

  1. Données de séries chronologiques. La clé est « Temps ». Par exemple, 5 ans de données sur les prix pour un seul jeton
  2. Données de la section transversale. La clé est « individuelle ». Par exemple.2023.11.01 Données sur les prix de tous les jetons sur le marché des crypto-monnaies ce jour-là
  3. Panneau. La clé est une combinaison de « temps individuel ». Par exemple, les données de prix de tous les jetons du 01.01.2019 au 01.11.2023 pendant quatre ans.

Principe : Une fois que vous avez déterminé l’index (clé) des données, vous pouvez savoir à quel niveau les données ne doivent pas avoir de valeurs en double.

Méthode de vérification :

1… DataFrame.duplicated(subset=[clé1, clé2, …])

1. Vérifiez le nombre de valeurs dupliquées :. DataFrame.duplicated(subset=[clé1, clé2, ...]). somme()
2. Exemple pour voir les échantillons en double : df[df.duplicated(subset=[...])]. sample(), puis utilisez df.loc pour sélectionner tous les échantillons en double correspondant à l’index

2…merge(df1, df2, on=[key1, key2, …], indicator=True, validate=‘1 :1’)

1. Ajoutez le paramètre indicateur à la fonction de fusion horizontale, et un champ _merge sera généré, et vous pouvez utiliser dfm['_merge'].value_counts() pour vérifier le nombre d’échantillons provenant de différentes sources après la fusion
2. Ajoutez le paramètre validate pour vérifier si les index du jeu de données fusionné sont conformes aux attentes (1 à 1, 1 à plusieurs ou plusieurs à plusieurs, le dernier cas n’est en fait pas validé). Si les résultats ne sont pas ceux attendus, une erreur sera signalée et l’exécution sera interrompue.

2. Valeurs aberrantes/Valeurs manquantes/Valeurs extrêmes

Causes courantes des valeurs aberrantes :

  1. Cas extrêmes. Par exemple, si le prix du jeton est de 0,000001 $ ou d’un jeton dont la valeur marchande n’est que de 500 000 $, un petit changement aura un taux de retour de dizaines de fois.
  2. Caractéristiques des données. Par exemple, si les données de prix du token sont téléchargées à partir du 1er janvier 2020, il est naturellement impossible de calculer les données de retour au 1er janvier 2020, car il n’y a pas de cours de clôture de la veille.
  3. Erreur de données. Les fournisseurs de données commettent inévitablement des erreurs, telles que l’enregistrement de 12 yuans par jeton comme 1,2 yuan par jeton.

Principes de gestion des valeurs aberrantes et manquantes :

  1. Supprimer. Les valeurs aberrantes qui ne peuvent pas être raisonnablement corrigées ou corrigées peuvent être supprimées.
  2. Remplacer. Il est souvent utilisé pour gérer des valeurs extrêmes, telles que le Winsorizing ou les logarithmes (qui ne sont pas couramment utilisés).
  3. Remplissage. Pour les valeurs manquantes, vous pouvez également envisager de remplir de manière raisonnable, les méthodes courantes incluent les valeurs moyennes (ou moyennes mobiles), l’interpolation, le remplissage de 0 df.fillna(0), le remplissage direct de df.fillna(‘ffill’)/le remplissage arrière de df.fillna(‘bfill’), etc., pour déterminer si les hypothèses sur lesquelles repose le remplissage sont correctes.

L’apprentissage automatique doit être utilisé avec prudence pour le remblayage et risquer un biais de prévision

Gestion des valeurs extrêmes :

  1. Méthode du centile.

En classant l’ordre du plus petit au plus grand, remplacez les données qui dépassent les proportions minimale et maximale par des données critiques. Pour les données avec des données historiques abondantes, cette méthode est relativement grossière et ne s’applique pas, et la suppression forcée d’une proportion fixe de données peut entraîner un certain pourcentage de pertes.

2,3σ / méthode du triple écart-type

L’écart-type σfactor reflète le degré de dispersion de la distribution des données du facteur, c’est-à-dire la volatilité. La plage μ±3×σ a été utilisée pour identifier et remplacer les valeurs aberrantes dans l’ensemble de données, et environ 99,73 % des données se situaient dans la plage. La prémisse de cette méthode est que les données factorielles doivent obéir à une distribution normale, c’est-à-dire X∼N(μ,σ2).

où μ=∑ⁿi₌₁⋅Xi/N, σ²=∑ⁿi₌₁=(xi-μ)²/n, la plage raisonnable des valeurs des facteurs est [μ−3×σ, μ+3×σ].

Effectuez les ajustements suivants pour tous les facteurs de la plage de données :

用多因子策略构建强大的加密资产投资组合 :数据预处理篇

L’inconvénient de cette méthode est que les données couramment utilisées dans le domaine quantitatif, telles que les prix des actions et les prix des jetons, montrent souvent une distribution de pointe et de queue épaisse, ce qui n’est pas conforme à l’hypothèse d’une distribution normale, et dans ce cas, une grande quantité de données sera identifiée à tort comme des valeurs aberrantes en utilisant la méthode 3σ.

3.绝对值差中位数法(Écart absolu médian, MAD)

La méthode est basée sur le biais médian et absolu, ce qui rend les données traitées moins sensibles aux extrêmes ou aux valeurs aberrantes. Plus robuste que les méthodes basées sur la moyenne et l’écart-type.

Médiane de l’écart absolu MAD=médiane ( ∑ⁿi₌₁(Xi - Xmédian) )

Une plage raisonnable de valeurs de facteur est [Xmedian-n×MAD, Xmedian + n×MAD]. Effectuez les ajustements suivants pour tous les facteurs de la plage de données :

用多因子策略构建强大的加密资产投资组合 :数据预处理篇

Gestion des cas de valeurs extrêmes des données factorielles

class Extreme(objet) : def init(s, ini_data) : s.ini_data = ini_data

def three_sigma(s,n=3) :
    moyenne = s.ini_data.mean()
    std = s.ini_data.std()
    faible = moyenne - n*std
    élevé = moyenne + n*std
    return np.clip(s.ini_data,low,high)

def mad(s, n=3) :
    median = s.ini_data.median()
    mad_median = abs(s.ini_data - médiane).median()
    élevé = médiane + n * mad_median
    faible = médiane - n * mad_median
    return np.clip(s.ini_data, bas, haut)

def quantile(s,l = 0.025, h = 0.975):
    faible = s.ini_data.quantile(l)
    élevé = s.ini_data.quantile(h)
    return np.clip(s.ini_data, bas, haut)

III. Normalisation

  1. Standardisation du score Z
  • Préalable : X N (μ, σ)
  • En raison de l’utilisation de l’écart-type, cette méthode est sensible aux valeurs aberrantes dans les données

x’i=(x−μ)/σ=(X−mean(X)))/std(X)2.Mise à l’échelle min-max

La conversion de chaque facteur en données dans l’intervalle (0,1) permet de comparer des données de tailles ou de plages différentes, mais elle ne modifie pas la distribution dans les données et ne rend pas la somme 1.

  • Sensible aux valeurs aberrantes en raison de la prise en compte des minima maximaux Dimension unifiée, qui permet de comparer des données de différentes dimensions.

x’i=(xi−min(x))/max(x)-min(x)3.排序百分位(Échelonnement des rangs)

Convertissez les entités de données dans leurs classements et convertissez ces classements en scores compris entre 0 et 1, généralement leurs percentiles dans le jeu de données. *

Étant donné que les classements ne sont pas affectés par les valeurs aberrantes, cette méthode n’est pas sensible aux valeurs aberrantes. **

  • Au lieu de conserver la distance absolue entre les points dans les données, elle est convertie en un classement relatif.

NormRanki=(Rangₓi−min(Rangₓi))/max(Rangₓ)−min(Rangₓ)=Rangₓi/N

min(Rankₓ)=0, où N est le nombre total de points de données dans l’intervalle.

Normaliser les données factorielles

class Scale(objet) : def init(s, ini_data,date) : s.ini_data = ini_data s.date = date

Score(s) Z DEF :
    moyenne = s.ini_data.mean()
    std = s.ini_data.std()
    return s.ini_data.sub(mean).div(std)
  
def maxmin(s) :
    min = s.ini_data.min()
    max = s.ini_data.max()
    return s.ini_data.sub(min).div(max - min)

def normRank(s) :
    # Classer les colonnes spécifiées, method='min' signifie que la même valeur aura le même rang, pas le rang moyen
    ranks = s.ini_data.rank(method='min') 
    return ranks.div(ranks.max())

Quatrièmement, la fréquence des données

Parfois, les données obtenues ne sont pas aussi fréquentes que nous en avons besoin pour notre analyse. Par exemple, si le niveau d’analyse est mensuel et que la fréquence des données brutes est quotidienne, vous devez utiliser le « sous-échantillonnage », c’est-à-dire que les données agrégées sont mensuelles.

SOUS-ÉCHANTILLONNAGE

Il s’agit d’agréger les données d’une collection en une ligne de données, par exemple en agrégeant des données quotidiennes en données mensuelles. Dans ce cas, il est nécessaire de considérer les caractéristiques de chaque indicateur agrégé, et les opérations habituelles sont :

  • Première valeur/dernière valeur
  • Moyenne/médiane *écart type

Suréchantillonner

Il s’agit de diviser une ligne de données en plusieurs lignes de données, telles que les données annuelles pour l’analyse mensuelle. Il s’agit généralement d’une simple répétition, et il est parfois nécessaire d’agréger les données annuelles au prorata de chaque mois.

Falcon (/) est une nouvelle génération d’infrastructure d’investissement Web3 basée sur un modèle multifactoriel qui aide les utilisateurs à « sélectionner », « acheter », « gérer » et « vendre » des actifs cryptographiques. Falcon a été incubé par Lucida en juin 2022.

D’autres contenus sont disponibles sur le site

Voir l'original
Cette page peut inclure du contenu de tiers fourni à des fins d'information uniquement. Gate ne garantit ni l'exactitude ni la validité de ces contenus, n’endosse pas les opinions exprimées, et ne fournit aucun conseil financier ou professionnel à travers ces informations. Voir la section Avertissement pour plus de détails.
  • Récompense
  • Commentaire
  • Reposter
  • Partager
Commentaire
Ajouter un commentaire
Ajouter un commentaire
Aucun commentaire
  • Épingler