import pandas as pd import numpy as np from transformers import AutoTokenizer, AutoModelForCausalLM class ProfileGenerator: def __init__(self): # Charger Open R1 pour la partie profiling self.tokenizer = AutoTokenizer.from_pretrained("open-r1") self.model = AutoModelForCausalLM.from_pretrained("open-r1") # Configuration des profils self.risk_levels = ["Prudent", "Modéré", "Dynamique"] self.goals = ["Retraite", "Immobilier", "Études", "Épargne"] def generate_profile_data(self, num_samples=1000): data = [] for _ in range(num_samples): # Générer profil de base profile = { "age": np.random.randint(18, 70), "income": np.random.randint(2000, 20000), "savings": np.random.randint(500, 5000), "goals": np.random.choice(self.goals, size=2, replace=False), "risk_tolerance": np.random.choice(self.risk_levels) } # Générer description avec Open R1 profile["description"] = self._generate_profile_description(profile) data.append(profile) return pd.DataFrame(data) def _generate_profile_description(self, profile): # Préparation du prompt pour Open R1 prompt = f""" Profil investisseur : - Age: {profile['age']} ans - Revenu: {profile['income']}€/mois - Épargne: {profile['savings']}€/mois - Objectifs: {', '.join(profile['goals'])} - Tolérance au risque: {profile['risk_tolerance']} Décrivez ce profil d'investisseur et suggérez une approche personnalisée. """ # Générer la description avec Open R1 inputs = self.tokenizer(prompt, return_tensors="pt") outputs = self.model.generate(**inputs, max_length=200) return self.tokenizer.decode(outputs[0]) def main(): # Générer données generator = ProfileGenerator() df = generator.generate_profile_data() # Sauvegarder df.to_csv("src/data/investment_profiles.csv", index=False) print("Données générées et sauvegardées") if __name__ == "__main__": main()