{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.12.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceType":"competition","sourceId":118765,"databundleVersionId":15231210,"isSourceIdPinned":false}],"dockerImageVersionId":31286,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# ================================\n# Fold Wars: Stanford RNA 3D Part 3\n# Competition-Grade Pipeline\n# ================================\n\nimport numpy as np\nimport pandas as pd\nimport datetime\nimport logging\nimport random\n\nfrom sklearn.model_selection import StratifiedKFold\nfrom sklearn.metrics import accuracy_score\nfrom sklearn.ensemble import GradientBoostingClassifier, RandomForestClassifier\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.pipeline import Pipeline\n\n# -------------------------------\n# Logging System\n# -------------------------------\nlogging.basicConfig(filename=\"foldwars_submission_log.txt\",\n                    level=logging.INFO,\n                    format=\"%(asctime)s - %(message)s\")\n\n# -------------------------------\n# RNA Status Tracker\n# -------------------------------\nclass FoldWarsStatus:\n    def __init__(self):\n        self.latest_score = None\n        self.best_score = 0\n        self.submissions = 0\n        self.max_daily = 5\n\n    def submit(self, score):\n        if self.submissions >= self.max_daily:\n            print(\"Daily limit reached.\")\n            return\n\n        self.latest_score = score\n        self.best_score = max(self.best_score, score)\n        self.submissions += 1\n\n        print(f\"Submission #{self.submissions} | Score: {score:.4f}\")\n        logging.info(f\"Submission #{self.submissions} | Score: {score:.4f}\")\n\n    def status(self):\n        print(\"\\n=== Fold Wars Part 3 Status ===\")\n        print(f\"Latest Score : {self.latest_score}\")\n        print(f\"Best Score   : {self.best_score}\")\n        print(f\"Submissions  : {self.submissions}/{self.max_daily}\")\n\n# -------------------------------\n# Feature Engineering\n# RNA-style synthetic example\n# (Replace with real sequence embeddings later)\n# -------------------------------\ndef generate_features(n=500):\n    np.random.seed(42)\n\n    seq_length = np.random.randint(50,150,n)\n    gc_content = np.random.rand(n)\n    pairing_prob = np.random.rand(n)\n    loop_density = np.random.rand(n)\n    energy = np.random.normal(-10, 2, n)\n\n    X = np.vstack([\n        seq_length,\n        gc_content,\n        pairing_prob,\n        loop_density,\n        energy\n    ]).T\n\n    y = (pairing_prob + gc_content + (energy < -9)).astype(int)\n\n    return X, y\n\n# -------------------------------\n# Cross Validation Training\n# -------------------------------\ndef train_foldwars_model(X, y):\n\n    skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)\n\n    gb_scores = []\n    rf_scores = []\n    meta_scores = []\n\n    for train_idx, val_idx in skf.split(X,y):\n\n        X_train, X_val = X[train_idx], X[val_idx]\n        y_train, y_val = y[train_idx], y[val_idx]\n\n        gb = GradientBoostingClassifier()\n        rf = RandomForestClassifier(n_estimators=200)\n\n        gb.fit(X_train,y_train)\n        rf.fit(X_train,y_train)\n\n        gb_pred = gb.predict_proba(X_val)[:,1]\n        rf_pred = rf.predict_proba(X_val)[:,1]\n\n        stack_X = np.vstack([gb_pred, rf_pred]).T\n\n        meta = LogisticRegression()\n        meta.fit(stack_X, y_val)\n\n        final_pred = meta.predict(stack_X)\n\n        score = accuracy_score(y_val, final_pred)\n\n        gb_scores.append(score)\n        rf_scores.append(score)\n        meta_scores.append(score)\n\n    return np.mean(meta_scores)\n\n# -------------------------------\n# MAIN EXECUTION\n# -------------------------------\nstatus = FoldWarsStatus()\nstatus.status()\n\nX, y = generate_features()\n\nscore = train_foldwars_model(X,y)\nstatus.submit(score)\nstatus.status()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-02-28T07:24:32.568729Z","iopub.execute_input":"2026-02-28T07:24:32.569495Z","iopub.status.idle":"2026-02-28T07:24:38.204569Z","shell.execute_reply.started":"2026-02-28T07:24:32.56946Z","shell.execute_reply":"2026-02-28T07:24:38.203811Z"}},"outputs":[],"execution_count":null}]}