Selection 15% de ligne

  • Initiateur de la discussion Initiateur de la discussion hipzen
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

H

hipzen

Guest
Bonjour,

J'ai réaliser un model de prédiction sur une base de donnée et j'aimerai pouvoir comparer ce model avec un model aléatoire.

Pour ce faire, j'ai besoin de sélectionner 15% des consolateurs et ce de manière aléatoire. Sachant que chaque ligne correspond à un consommateur, comment créer une nouvelle colonne dont les cellules seraient égale à 1 ou 0, 1 étant équivalent aux consommateurs sélectionnés de manière aléatoire et 0 aux consommateurs non sélectionnés ?

Merci d'avance !
 
Re : Selection 15% de ligne

Bonsoir à tous

hipzen [Bienvenue sur le forum]
Extrait de la charte du forum
5 – La possibilité de joindre des fichiers est donnée sur ce forum.
Ne pas hésiter à utiliser cette fonction, tout en veillant que les données soient bidons et donc qu’aucune donnée confidentielle, nominative ne soit dans le fichier.
Merci d'avance !
De rien!😉
 
Re : Selection 15% de ligne

Bonjour,

Voici une partie du fichier avec les id_cust. La deuxième colonne a été composée sur base du model de prédiction. Le but étant de remplir la 3ème colonne en donnant de manière aléatoire des 1 à 15% des consommateurs et 0 à 85%.

La dernière étape étant de comparer les deux lignes afin de voir combien de personne ont été correctement ciblées par le model aléatoire (soit les deux lignes étant égales à 1). Le but final étant d'analyser en poucentage le nombre de clients correctement ciblé par le model aléatoire.

L’échantillon comportant 2000 clients, le but étant de mettre 300 "1" de manière aléatoire et 1700 "0" pour les autres.

J'espère que c'est plus claire 😉

Merci d'avance.
 

Pièces jointes

Dernière modification par un modérateur:
Re : Selection 15% de ligne

Bonsoir hipzen, Jean-Marie,

Problème classique, voyez le fichier joint avec cette formule en D2, à tirer vers le bas :

Code:
=N(RANG(C2;C:C)<=15%*NB(C:C))
Vérification du pourcentage en I3 :

Code:
=NB.SI(D:D;1)/NB(D:D)
Bonne nuit.
 

Pièces jointes

Re : Selection 15% de ligne

Bonjour hipzen, le forum,

Une solution VBA avec cette macro :

Code:
Sub Tirage()
'cellule nommée PCT
With [C2:C2001] 'à adapter
  Intersect(.EntireRow, [IV:IV]) = "=RAND()"
  .FormulaR1C1 = "=N(RANK(RC256,C256)<=PCT*COUNT(C256))"
  .Value = .Value 'supprime les formules
  [IV:IV] = ""
  'redéfinit la barre de défilement horizontale
  With .Parent.UsedRange: End With
End With
End Sub
Le pourcentage est dans la cellule nommée PCT.

A+
 

Pièces jointes

Re : Selection 15% de ligne

Re,

La fonction RANG (RANK) prend beaucoup de temps.

Testez le fichier (1) précédent sur 50000 lignes... C'est rédhibitoire !!

En utilisant la fonction SMALL (PETITE.VALEUR) c'est très rapide :

Code:
Sub Tirage()
'cellule nommée PCT
Dim v$
With [C2:C2001] 'à adapter
  With Intersect(.EntireRow, [IV:IV])
    .Formula = "=RAND()"
    .Value = .Value 'supprime les formules
  End With
  v = Replace([SMALL(IV:IV,PCT*COUNT(IV:IV))], ",", ".")
  .FormulaR1C1 = "=N(RC256<=" & v & ")"
  .Value = .Value 'supprime les formules
  [IV:IV] = ""
  'redéfinit la barre de défilement horizontale
  With .Parent.UsedRange: End With
End With
End Sub
Fichier (2).

A+
 

Pièces jointes

Re : Selection 15% de ligne

Bonjour hipzen, le forum,

Avec 1 000 000 de lignes le fichier (2) plante Excel.

Raison : avec la colonne auxiliaire en colonne IV le UsedRange est trop grand.

Alors il suffit de mettre la colonne auxiliaire en colonne A (masquée) :

Code:
Sub Tirage()
'cellule nommée PCT
Dim v$
With [D2:D2001] 'à adapter
  With Intersect(.EntireRow, [A:A])
    .Formula = "=RAND()"
    .Value = .Value 'supprime les formules
  End With
  v = Replace([SMALL(A:A,PCT*COUNT(A:A))], ",", ".")
  .FormulaR1C1 = "=N(RC1<=" & v & ")"
  .Value = .Value 'supprime les formules
  [A:A] = ""
End With
End Sub
Fichier (3).

Bonne journée.
 

Pièces jointes

Re : Selection 15% de ligne

Bonjour hipzen,

Finalement cette solution (4) est bien meilleure :

Code:
Sub Tirage()
'cellule nommée PCT
Dim h&, a%(), i&, j&
If [PCT] > 1 Then [PCT] = 1
With [C2:C2001] 'à adapter
  h = .Count
  ReDim a(1 To h, 1 To 1)
  Randomize
  For i = 1 To [PCT] * h
    Do
      j = Int(1 + h * Rnd)
    Loop While a(j, 1) = 1
    a(j, 1) = 1
  Next
  .Value = a
End With
End Sub
Testée sur 1 000 000 de lignes, elle est 3 fois plus rapide que la solution (3).

A+
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

S
Réponses
6
Affichages
2 K
soNZOOO
S
A
Réponses
11
Affichages
1 K
A
D
Réponses
4
Affichages
1 K
C
Réponses
4
Affichages
2 K
C
N
Réponses
5
Affichages
3 K
Nicocotte125
N
S
Réponses
4
Affichages
2 K
stage_ferrit
S
B
Réponses
2
Affichages
2 K
bastienb
B
Y
Réponses
11
Affichages
3 K
Y
D
  • Question Question
Réponses
1
Affichages
2 K
P
Réponses
15
Affichages
3 K
Pauliakov
P
Retour