GaiaEx AcademyGaiaEx Academy
മോഡൽ മോണിറ്ററിംഗിനുള്ള TensorFlow, Keras, TensorBoard
ഡെവലപ്പർAI & ML12 min read

മോഡൽ മോണിറ്ററിംഗിനുള്ള TensorFlow, Keras, TensorBoard

Google-ന്റെ ML ഫ്രെയിംവർക്കും അതിന്റെ ശക്തമായ വിസ്വലൈസേഷൻ ഡാഷ്ബോർഡും

പോസ്റ്റുകൾ പങ്കിടുക

TensorFlow ഇക്കോസിസ്റ്റം: ഒരു ഫ്രെയിംവർക്കിനും അപ്പുറം

TensorFlow, Google Brain വികസിപ്പിച്ച്, 2015-ൽ പുറത്തിറക്കിയത് — ഇത് ഒരു ഡീപ് ലേണിംഗ് ലൈബ്രറി മാത്രമല്ല, ഏത് സ്കെയിലിലും മെഷീൻ ലേണിംഗ് മോഡലുകൾ നിർമ്മിക്കാനും, ട്രെയിൻ ചെയ്യാനും, ഡിപ്ലോയ് ചെയ്യാനും, മോണിറ്റർ ചെയ്യാനുമുള്ള ഒരു മുഴുവൻ ഇക്കോസിസ്റ്റം ആണ്. PyTorch റിസർച്ചിൽ ആധിപത്യം പുലർത്തുമ്പോൾ, TensorFlow ഇപ്പോഴും പ്രൊഡക്ഷൻ ശക്തിയാണ് — Google, Airbnb, Twitter, മറ്റ് ആയിരക്കണക്കിന് കമ്പനികളിലും ദിവസവും ബില്യൺ കണക്കിന് predictions പ്രോസസ് ചെയ്യുന്ന സിസ്റ്റങ്ങളിൽ ഡിപ്ലോയ് ചെയ്തിരിക്കുന്നു.

ഈ ഇക്കോസിസ്റ്റം ML ലൈഫ്‌സൈക്കിൾ മുഴുവനും വ്യാപിക്കുന്നു:

  • Keras — മോഡലുകൾ നിർമ്മിക്കാനും ട്രെയിൻ ചെയ്യാനുമുള്ള high-level API, ഇപ്പോൾ TensorFlow-ൽ tf.keras ആയി പൂർണ്ണമായി സംയോജിപ്പിച്ചിരിക്കുന്നു
  • TensorBoard — ട്രെയിനിംഗ് മോണിറ്റർ ചെയ്യാനും, experiments താരതമ്യം ചെയ്യാനും, മോഡലുകൾ ഡീബഗ് ചെയ്യാനുമുള്ള visualization toolkit
  • tf.data — വലിയ ഡേറ്റാസെറ്റുകൾ മോഡലുകൾക്ക് നൽകാനുള്ള ഉയർന്ന performance data pipelines
  • TensorFlow Serving — versioning, batching, hardware acceleration ഉള്ള പ്രൊഡക്ഷൻ-ഗ്രേഡ് model serving
  • TensorFlow Lite — മൊബൈൽ, edge ഡിവൈസുകൾക്കുള്ള optimized runtime
  • TensorFlow.js — ബ്രൗസറിനുള്ളിൽ നേരിട്ട് മോഡലുകൾ റൺ ചെയ്യുക

ഈ വൈപുല്യമാണ് TensorFlow-ന്റെ ഏറ്റവും വലിയ ശക്തി. നിങ്ങൾക്ക് Jupyter notebook-ൽ Keras ഉപയോഗിച്ച് ഒരു മോഡൽ prototype ചെയ്യാം, GPU cluster-ൽ ട്രെയിൻ ചെയ്യാം, TensorBoard കൊണ്ട് ട്രെയിനിംഗ് മോണിറ്റർ ചെയ്യാം, ഒരു API-ക്ക് പിന്നിൽ TF Serving കൊണ്ട് serve ചെയ്യാം, Raspberry Pi-ലേക്ക് compressed version ഡിപ്ലോയ് ചെയ്യാം — ഇവയെല്ലാം ഒരേ ഫ്രെയിംവർക്കിനുള്ളിൽ. GaiaEx-ന്റെ API-യുമായി ബന്ധിപ്പിച്ച ഒരു ക്ലൗഡ് ട്രേഡിംഗ് എഞ്ചിനിലും ഗവേഷണത്തിനുള്ള ഒരു local workstation-ലും മോഡലുകൾ റൺ ചെയ്യേണ്ടിവരുന്ന ധനകാര്യ ആപ്ലിക്കേഷനുകൾക്ക്, ഈ വൈവിധ്യം പ്രധാനമാണ്.

TensorFlow ML lifecycle (simplified) Data Keras Train TB logs Serve / edge Same graph can feed research notebooks and production if you standardize artifacts (SavedModel). tf.data pipelines keep GPUs fed; TF Serving versions models without downtime
Prototype ചെയ്യുക, ട്രെയിൻ ചെയ്യുക, നിരീക്ഷിക്കുക, ഡിപ്ലോയ് ചെയ്യുക — ഒരു stack, പല runtimes.

Keras: മോഡൽ നിർമ്മാണത്തിനുള്ള Sequential, Functional API-കൾ

Keras ഒരു നിർദ്ദേശക തത്വത്തോടെ രൂപകൽപ്പന ചെയ്തതാണ്: ന്യൂറൽ നെറ്റ്‌വർക്കുകൾ നിർമ്മിക്കുന്നതിന്റെ കോഗ്നിറ്റിവ് ലോഡ് കുറയ്ക്കുക. രണ്ട് മോഡൽ-ബിൽഡിംഗ് API-കൾ വഴിയാണ് ഇത് സാധിക്കുന്നത്, ഓരോന്നും വ്യത്യസ്ത complexity ലെവലുകൾക്ക് അനുയോജ്യമാണ്.

Sequential API ആണ് ഏറ്റവും ലളിതം — layers-ന്റെ ഒരു linear stack:

import tensorflow as tf
from tensorflow import keras

model = keras.Sequential([
    keras.layers.Dense(128, activation="relu", input_shape=(20,)),
    keras.layers.Dropout(0.3),
    keras.layers.Dense(64, activation="relu"),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(1, activation="sigmoid"),
])

ഒന്നിലധികം inputs, outputs, shared layers, skip connections ഉള്ള മോഡലുകൾക്ക്, Functional API നിങ്ങൾക്ക് graph-level നിയന്ത്രണം പൂർണ്ണമായി നൽകുന്നു:

price_input = keras.Input(shape=(60, 5), name="price_sequence")
meta_input = keras.Input(shape=(10,), name="metadata")

x = keras.layers.LSTM(64, return_sequences=True)(price_input)
x = keras.layers.LSTM(32)(x)

combined = keras.layers.concatenate([x, meta_input])
combined = keras.layers.Dense(64, activation="relu")(combined)
output = keras.layers.Dense(1, activation="sigmoid")(combined)

model = keras.Model(inputs=[price_input, meta_input],
                    outputs=output)

ഈ മോഡൽ രണ്ട് inputs എടുക്കുന്നു — stacked LSTM-കൾ പ്രോസസ് ചെയ്യുന്ന 60-step price sequence, static features-ന്റെ ഒരു metadata vector — അവയെ സംയോജിപ്പിച്ച്, ഒരു directional prediction നൽകുന്നു. temporal patterns (recent price action) contextual information-ഉമായി (volatility regime, funding നിരക്ക്, ആഴ്ചയിലെ ദിവസം) ചേർത്ത് പഠിക്കാൻ ആഗ്രഹിക്കുന്ന ധനകാര്യ ML-ൽ ഈ architecture സാധാരണമാണ്.

ധനകാര്യ ആപ്ലിക്കേഷനുകൾക്ക് പ്രധാനപ്പെട്ട layer types: tabular features-ന് Dense, time series-ന് LSTM, GRU, local temporal patterns പഠിക്കാൻ Conv1D, transformer-style sequence modeling-ന് MultiHeadAttention.

മോഡലുകൾ കമ്പൈൽ ചെയ്യുകയും സ്മാർട്ടായി ട്രെയിൻ ചെയ്യാൻ Callbacks ഉപയോഗിക്കുകയും

നിർമ്മിച്ചു കഴിഞ്ഞാൽ, ഒരു Keras മോഡൽ മൂന്ന് ഘടകങ്ങളോടെ compile ചെയ്യണം: ഒരു optimizer, ഒരു loss function, evaluation metrics.

model.compile(
    optimizer=keras.optimizers.Adam(learning_rate=1e-3),
    loss="binary_crossentropy",
    metrics=["accuracy", keras.metrics.AUC(name="auc")],
)

history = model.fit(
    X_train, y_train,
    epochs=100,
    batch_size=64,
    validation_data=(X_val, y_val),
    callbacks=[...],
)

Callbacks ട്രെയിനിംഗിനിടയിൽ പ്രത്യേക പോയിന്റുകളിൽ — ഓരോ epoch-നു ശേഷം, batch-നു ശേഷം, അല്ലെങ്കിൽ ചില വ്യവസ്ഥകൾ പാലിക്കുമ്പോൾ — execute ചെയ്യുന്ന hooks ആണ്. അല്ലാത്തപക്ഷം മാനുവൽ monitoring ആവശ്യമായ ട്രെയിനിംഗ് മാനേജ്മെന്റ് ഇവ ഓട്ടോമേറ്റ് ചെയ്യുന്നു:

  • EarlyStoppingpatience epoch-കൾക്ക് validation loss മെച്ചപ്പെടാതെ വരുമ്പോൾ ട്രെയിനിംഗ് നിർത്തുന്നു. Overfitting-ഉം compute നഷ്ടവും തടയുന്നു. ഏറ്റവും നല്ല checkpoint-ലേക്ക് ഓട്ടോമാറ്റിക്കായി തിരിച്ചുപോകാൻ restore_best_weights=True സെറ്റ് ചെയ്യുക.
  • ModelCheckpoint — validation performance മെച്ചപ്പെടുമ്പോളൊക്കെ മോഡൽ സേവ് ചെയ്യുന്നു. ട്രെയിനിംഗ് ക്രാഷ് അല്ലെങ്കിൽ പിന്നീടുള്ള epoch-കളിലെ overfitting കൊണ്ട് നിങ്ങളുടെ ഏറ്റവും നല്ല മോഡൽ ഒരിക്കലും നഷ്ടപ്പെടില്ല.
  • ReduceLROnPlateau — validation loss plateau ആകുമ്പോൾ learning rate കുറയ്ക്കുന്നു. ഇത് പലപ്പോഴും ഒരു fixed learning rate-ന് വിട്ടുപോകുന്ന അധിക performance unlock ചെയ്യുന്നു — ആദ്യം മോഡൽ വലിയ steps എടുക്കുന്നു, പിന്നീട് ചെറിയ steps-ൽ fine-tune ചെയ്യുന്നു.
callbacks = [
    keras.callbacks.EarlyStopping(
        monitor="val_loss", patience=15,
        restore_best_weights=True),
    keras.callbacks.ModelCheckpoint(
        "best_model.keras", monitor="val_auc",
        mode="max", save_best_only=True),
    keras.callbacks.ReduceLROnPlateau(
        monitor="val_loss", factor=0.5,
        patience=5, min_lr=1e-6),
    keras.callbacks.TensorBoard(log_dir="./logs"),
]

EarlyStopping-ഉം ModelCheckpoint-ഉം എപ്പോഴും ഒരുമിച്ച് ഉപയോഗിക്കുക. ധനകാര്യ മോഡലിനെ അധികം epoch-കൾക്ക് ട്രെയിൻ ചെയ്യുന്നത് overfitting ഏറെക്കുറെ ഉറപ്പിക്കുന്നു — training data-യിലെ noise മോഡൽ memorize ചെയ്യാൻ തുടങ്ങുന്നു. ഈ രണ്ട് callback-കൾ, ശരിയായ സമയത്ത് നിർത്താനും, ശരിയായ weights നിലനിർത്താനും ഉറപ്പുനൽകുന്നു.

TensorBoard: ട്രെയിനിംഗ് വിഷ്വലൈസ് ചെയ്യുകയും മോഡലുകൾ ഡീബഗ് ചെയ്യുകയും

TensorBoard TensorFlow-ന്റെ visualization toolkit ആണ്, ഏത് ML practitioner-ന്റെയും workflow-ൽ ഏറ്റവും വിലയുള്ള tool-കളിൽ ഒന്ന് — TensorFlow, PyTorch, JAX ഏത് ഉപയോഗിച്ചാലും. ഇത് raw training logs-നെ, നിങ്ങളുടെ മോഡലിനുള്ളിൽ എന്ത് സംഭവിക്കുന്നു എന്ന് വെളിപ്പെടുത്തുന്ന interactive dashboards ആക്കി മാറ്റുന്നു.

നിങ്ങളുടെ log directory-ലേക്ക് പോയിന്റ് ചെയ്ത് TensorBoard ലോഞ്ച് ചെയ്യുക:

# Terminal
tensorboard --logdir=./logs --port=6006

# Or in a Jupyter notebook
%load_ext tensorboard
%tensorboard --logdir ./logs

ധനകാര്യ മോഡൽ വികസനത്തിന് പ്രധാനപ്പെട്ട visualizations:

Scalars — സമയത്തിന് അനുസരിച്ച് പ്ലോട്ട് ചെയ്ത training, validation loss curves. അവയ്ക്കിടയിലുള്ള gap overfitting വെളിപ്പെടുത്തുന്നു: training loss കുറഞ്ഞുകൊണ്ടിരിക്കുമ്പോൾ validation loss കൂടുന്നു എന്നാൽ നിങ്ങളുടെ മോഡൽ noise memorize ചെയ്യുന്നു എന്നാണ് അർത്ഥം. ആരോഗ്യകരമായ ട്രെയിനിംഗ് curves രണ്ടും ഒരുമിച്ച് കുറയുന്നത് കാണിക്കുന്നു, validation curve training-നു അല്പം മുകളിലായി.

Histograms — layers-ലും epoch-കളിലും weights, biases, activations എന്നിവയുടെ distributions. weight distributions പൂജ്യത്തിലേക്ക് ചുരുങ്ങുന്നതും (vanishing gradients), വലിയ മൂല്യങ്ങളിലേക്ക് പൊട്ടിത്തെറിക്കുന്നതും (unstable training), അല്ലെങ്കിൽ activations 0-ലോ 1-ലോ saturate ചെയ്യുന്നതും (dead neurons) നിരീക്ഷിക്കുക. ഈ പ്രശ്നങ്ങൾ loss curves-ൽ invisible ആണ്, എന്നാൽ histograms-ൽ വ്യക്തമാണ്.

Embeddings — t-SNE അല്ലെങ്കിൽ PCA ഉപയോഗിച്ച് high-dimensional representations 2D അല്ലെങ്കിൽ 3D സ്പേസിലേക്ക് project ചെയ്യുക. നിങ്ങളുടെ മോഡൽ, അതിന്റെ internal representations-ൽ വ്യത്യസ്ത market regimes, asset classes, volatility states എന്നിവ വേർതിരിച്ചറിയാൻ പഠിച്ചോ എന്ന് വിഷ്വലൈസ് ചെയ്യുക.

HParams — experiments-ന് ഇടയിൽ hyperparameter sweeps താരതമ്യം ചെയ്യുക. വ്യത്യസ്ത learning rates, architectures, dropout values ഉപയോഗിച്ച് ഒരേ മോഡൽ റൺ ചെയ്യുക, ഏത് combinations ആണ് ഏറ്റവും നല്ല validation metrics ഉണ്ടാക്കുന്നത് എന്ന് identify ചെയ്യുക. ഈ systematic താരതമ്യം, ad hoc experimentation-നെ evidence-based model selection ആയി മാറ്റുന്നു.

torch.utils.tensorboard.SummaryWriter class വഴി TensorBoard PyTorch-ഉമായും പ്രവർത്തിക്കുന്നു — visualization tools framework-agnostic ആണ്, TensorBoard ML ecosystem-ൽ ഒരു de facto standard ആയി മാറാൻ ഇത് ഒരു കാരണമാണ്.

TensorBoard panels (conceptual) Scalars train vs val loss Histograms weights / activations HParams compare runs Overfitting shows up as diverging curves before it shows up in your P&L backtest.
Scalars fit quality പിടിക്കുന്നു; histograms broken layers പിടിക്കുന്നു; HParams experiments താരതമ്യം ചെയ്യുന്നു.

പ്രൊഡക്ഷനുള്ള tf.data Pipelines, TensorFlow Serving

നിങ്ങളുടെ ഡേറ്റാസെറ്റ് memory-യിൽ fit ചെയ്യാൻ വളരെ വലുതാകുമ്പോൾ — GaiaEx പോലുള്ള exchange-കളിൽ നിന്നുള്ള tick-level ഡേറ്റയുമായി പ്രവർത്തിക്കുമ്പോൾ ഇത് സാധാരണമായ ഒരു സ്ഥിതി — tf.data ഒരു efficient, parallelized data pipeline നൽകുന്നു, അത് എല്ലാം ഒരുമിച്ച് load ചെയ്യാതെ നിങ്ങളുടെ GPU feed ചെയ്യുന്നു.

dataset = tf.data.Dataset.from_tensor_slices((features, labels))
dataset = (dataset
    .window(60, shift=1, drop_remainder=True)
    .flat_map(lambda w: w.batch(60))
    .batch(64)
    .prefetch(tf.data.AUTOTUNE)
)

prefetch(AUTOTUNE) കോൾ വളരെ critical ആണ് — ഇത് data loading, model computation ഒരുമിച്ച് overlap ചെയ്യാൻ അനുവദിക്കുന്നു, അതിനാൽ GPU അടുത്ത batch-ന് കാത്തിരിക്കുന്നില്ല. കോംപ്ലക്സ് feature engineering ഉള്ള ധനകാര്യ ഡേറ്റാസെറ്റുകൾക്ക്, നിങ്ങൾക്ക് parallel-ൽ റൺ ചെയ്യുന്ന .map() transformations chain ചെയ്യാം, precompute ചെയ്ത് സ്റ്റോർ ചെയ്യുന്നതിന് പകരം indicators, normalizations on-the-fly കമ്പ്യൂട്ട് ചെയ്യാം.

ഒരു high-performance gRPC അല്ലെങ്കിൽ REST API-ക്ക് പിന്നിൽ മോഡലുകൾ ഡിപ്ലോയ് ചെയ്യാനുള്ള പ്രൊഡക്ഷൻ-ഗ്രേഡ് സിസ്റ്റം ആണ് TensorFlow Serving. ഇത് model versioning (പഴയത് fallback ആയി നിലനിർത്തിക്കൊണ്ട് പുതിയ മോഡൽ serve ചെയ്യുക), request batching (GPU efficiency-ക്ക് ഒന്നിലധികം inference requests combine ചെയ്യുക), hardware acceleration എന്നിവ കൈകാര്യം ചെയ്യുന്നു — latency-ഉം reliability-ഉം പ്രധാനമായ ട്രേഡിംഗ് സിസ്റ്റങ്ങൾക്ക് ഇവയെല്ലാം critical ആണ്.

# Export a SavedModel
model.save("models/price_predictor/1")

# Serve with Docker
# docker run -p 8501:8501 \
#   --mount type=bind,source=$(pwd)/models,target=/models \
#   -e MODEL_NAME=price_predictor \
#   tensorflow/serving

ഒരു typical പ്രൊഡക്ഷൻ architecture: നിങ്ങളുടെ ട്രേഡിംഗ് bot GaiaEx-ന്റെ WebSocket feed-ലേക്ക് കണക്ട് ചെയ്യുന്നു, real-time-ൽ features കമ്പ്യൂട്ട് ചെയ്യുന്നു, TF Serving-ലേക്ക് inference requests അയക്കുന്നു, single-digit മില്ലിസെക്കൻഡുകളിൽ predictions സ്വീകരിക്കുന്നു. പുതിയ ഡേറ്റയിൽ retrain ചെയ്യുമ്പോൾ, updated മോഡൽ version 2 ആയി ഡിപ്ലോയ് ചെയ്യുക — TF Serving zero downtime-ൽ അത് swap ചെയ്യുന്നു.

TensorFlow Lite, Edge Deployment, TF vs PyTorch

TensorFlow Lite മൊബൈൽ ഡിവൈസുകൾ, embedded systems, edge hardware എന്നിവയിലെ deployment-നായി മോഡലുകൾ compress ചെയ്യുന്നു. quantization (32-bit floating-point weights-നെ 8-bit integers ആക്കി മാറ്റുക), pruning (near-zero weights നീക്കം ചെയ്യുക), architecture optimization പോലുള്ള techniques വഴി, TF Lite ഒരു മോഡലിന്റെ accuracy-യുടെ ഭൂരിഭാഗവും നിലനിർത്തിക്കൊണ്ട് 4x-ൽ അധികം ചുരുക്കാൻ കഴിയും. ക്ലൗഡ് ഇൻഫ്രാസ്ട്രക്ചറിൽ നിന്ന് സ്വതന്ത്രമായി പ്രവർത്തിക്കേണ്ട edge ട്രേഡിംഗ് നോഡുകൾക്കോ monitoring dashboards-നോ ഉപയോഗപ്രദമായ, പരിമിതമായ compute ഉള്ള ഡിവൈസുകളിൽ നേരിട്ട് inference റൺ ചെയ്യാൻ ഇത് സാധ്യമാക്കുന്നു.

# Convert a Keras model to TF Lite
converter = tf.lite.TFLiteConverter.from_saved_model("models/v1")
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()

with open("model.tflite", "wb") as f:
    f.write(tflite_model)

TensorFlow vs PyTorch — ധനകാര്യ ആപ്ലിക്കേഷനുകൾക്ക് നിങ്ങൾ ഏതാണ് തിരഞ്ഞെടുക്കേണ്ടത്?

  • ഗവേഷണത്തിനും prototyping-നും: PyTorch. അതിന്റെ dynamic graphs, Pythonic API, academic research-ൽ ആധിപത്യമുള്ള സ്ഥാനം എന്നിവ അർത്ഥമാക്കുന്നത്, കൂടുതൽ papers-ൽ PyTorch കോഡ് ഉൾപ്പെടുന്നു, കൂടുതൽ tutorials PyTorch ഉപയോഗിക്കുന്നു, ഡീബഗ്ഗിംഗ് കൂടുതൽ intuitive ആണ്.
  • സ്കെയിലിൽ പ്രൊഡക്ഷൻ ഡിപ്ലോയ്മെന്റിന്: TensorFlow ഇപ്പോഴും ഗുണങ്ങൾ നിലനിർത്തുന്നു. TF Serving, TF Lite, TensorFlow.js, PyTorch-ന്റെ TorchServe, ONNX Runtime ഇപ്പോഴും മുതിരുന്ന deployment paths-നെക്കാൾ battle-tested ആയ deployment paths നൽകുന്നു.
  • പ്രത്യേകമായി ധനകാര്യ ML-ന്: മോഡൽ വികസനത്തിനും experimentation-നും PyTorch-ൽ തുടങ്ങുക. നിങ്ങളുടെ പ്രൊഡക്ഷൻ ആവശ്യകതകൾ TF Serving-ന്റെ maturity അല്ലെങ്കിൽ TF Lite-ന്റെ edge deployment ആവശ്യപ്പെടുന്നെങ്കിൽ, നിങ്ങളുടെ ഏറ്റവും നല്ല മോഡലുകൾ convert ചെയ്യുക. പല ടീമുകളും ഗവേഷണത്തിന് PyTorch-ഉം ഡിപ്ലോയ്മെന്റിന് TensorFlow-ഉം ഉപയോഗിക്കുന്നു, ONNX (Open Neural Network Exchange) ഫോർമാറ്റ് വഴി അവയെ ബന്ധിപ്പിക്കുന്നു.

സത്യസന്ധമായ വസ്തുത: രണ്ട് ഫ്രെയിംവർക്കുകളും converge ചെയ്യുന്നു. TensorFlow eager execution സ്വീകരിച്ചു; PyTorch graph-level optimization-ന് torch.compile ചേർത്തു. Keras തന്നെ ഇപ്പോൾ PyTorch, JAX, TensorFlow-നെ backends ആയി പിന്തുണയ്ക്കുന്നു. ഏറ്റവും നല്ല ഫ്രെയിംവർക്ക് നിങ്ങളുടെ ടീമിന് നന്നായി അറിയാവുന്നതും പ്രൊഡക്ഷൻ കോഡ് ship ചെയ്യാൻ കഴിയുന്നതുമാണ്. ഒന്ന് തിരഞ്ഞെടുക്കുക, അതിൽ master ആകുക, tools-നെക്കുറിച്ച് debate ചെയ്യുന്നതിന് പകരം യഥാർത്ഥ പ്രശ്നം — markets predict ചെയ്യുക — പരിഹരിക്കുക.