<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Giri Dharan</title>
    <description>The latest articles on Forem by Giri Dharan (@giridharan_devops).</description>
    <link>https://forem.com/giridharan_devops</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3423616%2F9f69df69-64ff-493d-b501-fe4d70a4459f.jpg</url>
      <title>Forem: Giri Dharan</title>
      <link>https://forem.com/giridharan_devops</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/giridharan_devops"/>
    <language>en</language>
    <item>
      <title>Jenkins Architecture and Working Pattern with an Example.</title>
      <dc:creator>Giri Dharan</dc:creator>
      <pubDate>Fri, 13 Mar 2026 21:03:35 +0000</pubDate>
      <link>https://forem.com/giridharan_devops/jenkins-architecture-and-working-pattern-with-an-example-58le</link>
      <guid>https://forem.com/giridharan_devops/jenkins-architecture-and-working-pattern-with-an-example-58le</guid>
      <description>&lt;p&gt;Jenkins is an open-source automation server that's a powerhouse for Continuous Integration (CI) and Continuous Delivery (CD). Think of it as the conductor of an orchestra, making sure all the different instruments (your development tasks) play together in harmony to deliver a symphony (your software)!&lt;/p&gt;

&lt;p&gt;At its core, Jenkins uses a controller-agent architecture.&lt;/p&gt;

&lt;p&gt;Here's how it generally works:&lt;/p&gt;

&lt;p&gt;Jenkins Controller (formerly Master): This is the brain of the operation.&lt;br&gt;
It manages everything: scheduling build jobs, assigning tasks to agents, and keeping track of plugins and settings.&lt;br&gt;
It hosts the web interface where you configure jobs and monitor progress.&lt;br&gt;
It stores job configurations and build history.&lt;br&gt;
Jenkins Agent (formerly Slave): These are the workhorses.&lt;br&gt;
Agents are separate machines (physical, virtual, or even containers) that execute the tasks the controller assigns to them.&lt;br&gt;
They can run on different operating systems (Windows, Linux, macOS) to support cross-platform testing.&lt;br&gt;
Using multiple agents allows Jenkins to distribute the workload and run many tasks in parallel, preventing the controller from getting overloaded.&lt;/p&gt;

&lt;p&gt;How it works with a real-time example (using Jenkins Pipeline):&lt;/p&gt;

&lt;p&gt;The modern way to use Jenkins is with Jenkins Pipelines, which define your entire delivery process as code in a Jenkinsfile. This file lives alongside your application's code in a source control repository (like Git), meaning your automation workflow is versioned and reviewable just like any other code.&lt;/p&gt;

&lt;p&gt;Let's imagine a team developing a web application:&lt;/p&gt;

&lt;p&gt;Code Commit &amp;amp; Trigger: A developer pushes new code changes to a Git repository.&lt;br&gt;
Real-time example: git push origin feature/new-login-page&lt;br&gt;
A webhook or polling mechanism in Jenkins detects this change.&lt;br&gt;
Pipeline Execution: Jenkins reads the Jenkinsfile from the repository. This file defines a series of stages, like "Build," "Test," and "Deploy".&lt;br&gt;
Real-time example Jenkinsfile snippet (Declarative Pipeline) :&lt;br&gt;
null&lt;br&gt;
Task Delegation: The Jenkins Controller schedules these stages and delegates the actual execution steps to available agents. &lt;br&gt;
An agent checks out the code, runs the mvn clean install command to build the application, then mvn test for unit tests.&lt;br&gt;
Reporting and Artifacts: The agent sends the results (success/failure, test reports) back to the controller.&lt;br&gt;
If the build is successful, the agent might publish the build artifact (e.g., a .jar or Docker image) to an artifact registry.&lt;br&gt;
Further Actions: The controller updates the build status in the Jenkins UI and can trigger downstream jobs or send notifications (e.g., to Slack or email). &lt;br&gt;
If all tests pass, the "Deploy to Staging" stage runs, and then, if configured, the "Deploy to Production" stage for the main branch.&lt;/p&gt;

&lt;p&gt;This entire process ensures that every code change is automatically built, tested, and potentially deployed, catching issues early and accelerating the software delivery process. &lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>cicd</category>
      <category>jenkins</category>
    </item>
    <item>
      <title>What is Subnet mask? And its Usage with examples in general &amp; on cloud implications.</title>
      <dc:creator>Giri Dharan</dc:creator>
      <pubDate>Wed, 25 Feb 2026 16:12:08 +0000</pubDate>
      <link>https://forem.com/giridharan_devops/what-is-subnet-mask-and-its-usage-with-examples-in-general-on-cloud-implications-8mo</link>
      <guid>https://forem.com/giridharan_devops/what-is-subnet-mask-and-its-usage-with-examples-in-general-on-cloud-implications-8mo</guid>
      <description>&lt;p&gt;A subnet mask is a 32-bit number that divides an IPv4 address into network and host portions. Devices use it via bitwise AND operations to identify local traffic versus packets needing a router.&lt;/p&gt;

&lt;h2&gt;
  
  
  Definition
&lt;/h2&gt;

&lt;p&gt;It consists of contiguous 1s (network bits) followed by 0s (host bits) in binary, often written in dotted decimal like 255.255.255.0 (/24 in CIDR notation). This enables subnetting to split large networks into smaller, efficient segments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Examples
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Class A: 255.0.0.0 (/8) – Supports ~16 million hosts per network.&lt;/li&gt;
&lt;li&gt;Class B: 255.255.0.0 (/16) – Supports ~65,000 hosts.&lt;/li&gt;
&lt;li&gt;Class C: 255.255.255.0 (/24) – Supports 254 hosts (limits broadcast traffic).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;p&gt;For IP 192.168.1.10 with mask 255.255.255.0, the network ID is 192.168.1.0; hosts range from .1 to .254. Routers compare masks to forward traffic correctly, reducing congestion and enhancing security.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Notation&lt;/th&gt;
&lt;th&gt;Dotted Decimal&lt;/th&gt;
&lt;th&gt;Binary (key part)&lt;/th&gt;
&lt;th&gt;Usable Hosts&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;/24&lt;/td&gt;
&lt;td&gt;255.255.255.0&lt;/td&gt;
&lt;td&gt;11111111.00000000&lt;/td&gt;
&lt;td&gt;254&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/25&lt;/td&gt;
&lt;td&gt;255.255.255.128&lt;/td&gt;
&lt;td&gt;11111111.10000000&lt;/td&gt;
&lt;td&gt;126&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/26&lt;/td&gt;
&lt;td&gt;255.255.255.192&lt;/td&gt;
&lt;td&gt;11111111.11000000&lt;/td&gt;
&lt;td&gt;62&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;How to calculate subnet mask from CIDR notation&lt;/p&gt;

&lt;p&gt;To convert CIDR notation (like /24) to a subnet mask, count the prefix number as leading 1s in a 32-bit binary string, fill the rest with 0s, then group into four 8-bit octets and convert to decimal.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Take the CIDR prefix (e.g., /24 means 24 bits).&lt;/li&gt;
&lt;li&gt;Write 24 ones followed by 8 zeros: 11111111.11111111.11111111.00000000.&lt;/li&gt;
&lt;li&gt;Convert each octet to decimal: 255.255.255.0.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Examples
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CIDR&lt;/th&gt;
&lt;th&gt;Binary (grouped by octet)&lt;/th&gt;
&lt;th&gt;Subnet Mask&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;/16&lt;/td&gt;
&lt;td&gt;11111111.11111111.00000000.00000000&lt;/td&gt;
&lt;td&gt;255.255.0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/24&lt;/td&gt;
&lt;td&gt;11111111.11111111.11111111.00000000&lt;/td&gt;
&lt;td&gt;255.255.255.0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;/27&lt;/td&gt;
&lt;td&gt;11111111.11111111.11111111.11100000&lt;/td&gt;
&lt;td&gt;255.255.255.224&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;For octet values, remember powers of 2: 128+64+32+16+8+4+2+1 (full octet=255); partial 1s yield 240 (/28), 248 (/29), 252 (/30), etc.&lt;/p&gt;

&lt;p&gt;subnet mask configuration on cloud especially in aws&lt;/p&gt;

&lt;p&gt;In AWS VPCs, the subnet mask is defined by the CIDR block's prefix length (e.g., /24 = 255.255.255.0), specifying the IP range available for instances in that subnet across an Availability Zone. It ensures non-overlapping addresses, reserves 5 IPs per subnet, and supports public/private isolation via route tables.&lt;/p&gt;

&lt;h2&gt;
  
  
  VPC Workflow
&lt;/h2&gt;

&lt;p&gt;VPCs use primary CIDR (e.g., 10.0.0.0/16); subnets carve out portions like 10.0.1.0/24. Configure via console (VPC &amp;gt; Subnets &amp;gt; Create), CLI (&lt;code&gt;aws ec2 create-subnet&lt;/code&gt;), or Terraform (&lt;code&gt;cidr_block&lt;/code&gt; param).&lt;/p&gt;

&lt;h2&gt;
  
  
  Terraform Snippet
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"
}
resource "aws_subnet" "private" {
  vpc_id     = aws_vpc.main.id
  cidr_block = "10.0.2.0/24"  # 255.255.255.0
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ideal for your DevOps IaC setups with Terraform/K8s.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Example CIDR&lt;/th&gt;
&lt;th&gt;Mask&lt;/th&gt;
&lt;th&gt;Routing Need&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Public&lt;/td&gt;
&lt;td&gt;10.0.1.0/24&lt;/td&gt;
&lt;td&gt;255.255.255.0&lt;/td&gt;
&lt;td&gt;Internet Gateway&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Private&lt;/td&gt;
&lt;td&gt;10.0.2.0/26&lt;/td&gt;
&lt;td&gt;255.255.255.192&lt;/td&gt;
&lt;td&gt;NAT Gateway&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>data</category>
      <category>cloud</category>
      <category>networking</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>Linux Operating Systems and its Impact, role on IT.</title>
      <dc:creator>Giri Dharan</dc:creator>
      <pubDate>Mon, 09 Feb 2026 04:55:43 +0000</pubDate>
      <link>https://forem.com/giridharan_devops/linux-operating-systems-and-its-impact-role-on-it-2a8n</link>
      <guid>https://forem.com/giridharan_devops/linux-operating-systems-and-its-impact-role-on-it-2a8n</guid>
      <description>&lt;p&gt;Linux powers ~80-90% of cloud infrastructure, servers, and supercomputers, making it indispensable in the IT industry for its stability, security, and open-source nature. Its rise in desktops (4-30% among developers) and enterprise adoption in 2026 drives efficiency, privacy, and cost savings amid AI, cloud, and sustainability trends.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Industry Impacts
&lt;/h2&gt;

&lt;p&gt;Linux dominates hyperscalers (AWS, Azure) and enables containerization (Docker, Kubernetes), reducing costs via no licensing fees and scalability. It supports AI/ML workloads, hybrid clouds, and edge computing, with kernel improvements boosting energy efficiency and privacy—key for ESG compliance and dev teams.&lt;/p&gt;

&lt;p&gt;In Chennai's tech hubs, it's core to AWS EKS deployments and MLOps pipelines, aligning with IaC tools like Terraform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prominent Job Roles
&lt;/h2&gt;

&lt;p&gt;Demand surges for Linux-proficient roles in DevOps/MLOps, with skills in automation, Kubernetes, and cloud yielding high employability.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Role&lt;/th&gt;
&lt;th&gt;Core Linux Duties&lt;/th&gt;
&lt;th&gt;Typical Tools/Tech&lt;/th&gt;
&lt;th&gt;Industry Fit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;DevOps Engineer&lt;/td&gt;
&lt;td&gt;Automate CI/CD, manage servers, IaC&lt;/td&gt;
&lt;td&gt;Jenkins, Terraform, Ansible, Kubernetes&lt;/td&gt;
&lt;td&gt;Cloud ops, software delivery&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Site Reliability Engineer (SRE)&lt;/td&gt;
&lt;td&gt;Ensure uptime, optimize infra&lt;/td&gt;
&lt;td&gt;Prometheus, logging on Linux clusters&lt;/td&gt;
&lt;td&gt;Large-scale apps, reliability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud DevOps Engineer&lt;/td&gt;
&lt;td&gt;Provision VMs/containers&lt;/td&gt;
&lt;td&gt;AWS EC2/EKS, OpenShift&lt;/td&gt;
&lt;td&gt;Hybrid/multi-cloud&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kubernetes Admin&lt;/td&gt;
&lt;td&gt;Orchestrate containers&lt;/td&gt;
&lt;td&gt;Kubeconfig, RBAC on Linux nodes&lt;/td&gt;
&lt;td&gt;Microservices, MLOps&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

</description>
      <category>linux</category>
      <category>cloud</category>
      <category>webdev</category>
      <category>ai</category>
    </item>
    <item>
      <title>MLOps Practices : Technologies, Tools, Principles on Applied Real Life Data Science Workflows.</title>
      <dc:creator>Giri Dharan</dc:creator>
      <pubDate>Thu, 01 Jan 2026 14:25:56 +0000</pubDate>
      <link>https://forem.com/giridharan_devops/mlops-practices-technologies-tools-principles-on-applied-real-life-data-science-workflows-4cf6</link>
      <guid>https://forem.com/giridharan_devops/mlops-practices-technologies-tools-principles-on-applied-real-life-data-science-workflows-4cf6</guid>
      <description>&lt;p&gt;MLOps practices turn one-off ML experiments into reliable, repeatable products by borrowing ideas from DevOps and adapting them to data, models, and continuous learning.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is MLOps?
&lt;/h2&gt;

&lt;p&gt;MLOps is the set of &lt;strong&gt;practices&lt;/strong&gt; and tools used to manage the full ML lifecycle: data ingestion, training, deployment, monitoring, and retraining.&lt;br&gt;
It aims to shorten time-to-production while increasing reliability, similar to how DevOps improved traditional software delivery.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core MLOps Principles
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Version everything: data, code, models, and configurations must be tracked to reproduce any model build.&lt;/li&gt;
&lt;li&gt;Automate the lifecycle: CI/CD extends to ML with automated training, testing, and deployment pipelines.&lt;/li&gt;
&lt;li&gt;Monitor in production: models are continuously watched for drift, performance degradation, and outages.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Practice 1: Reproducible ML Environments
&lt;/h2&gt;

&lt;p&gt;Reproducibility starts with standard environments using containers (Docker) and IaC (Terraform/Kubernetes) so the same pipeline runs identically in dev, staging, and prod.&lt;br&gt;
Tools like MLflow or similar trackers store parameters, code versions, and artifacts so a specific run can be rebuilt later.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-time example: EKS + Kubeflow
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;AWS provides a sample where Kubeflow pipelines run on Amazon EKS, with each pipeline step packaged as a Helm chart and executed as part of a single Helm release.&lt;/li&gt;
&lt;li&gt;This design makes the ML pipeline reproducible and atomic: each step (data prep, training, evaluation) is declared as YAML, versioned in Git, and redeployable across environments.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Practice 2: CI/CD for Models
&lt;/h2&gt;

&lt;p&gt;CI/CD for ML adds automated tests around data quality, training code, and model performance before deployment.&lt;br&gt;
Pipelines typically trigger on Git commits or new data arrivals, run training, evaluate against baselines, and only promote if metrics improve.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-time example: SageMaker + Kubernetes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;An AWS pattern defines a SageMaker training pipeline as JSON and wraps it in a Kubernetes custom resource (ACK for SageMaker), applied with &lt;code&gt;kubectl&lt;/code&gt; from an EKS cluster.&lt;/li&gt;
&lt;li&gt;DevOps engineers manage ML pipelines using the same GitOps/Kubernetes workflow they use for microservices, including &lt;code&gt;kubectl apply&lt;/code&gt;, describe, and delete for pipeline runs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Practice 3: Data &amp;amp; Model Versioning
&lt;/h2&gt;

&lt;p&gt;Data versioning (e.g., with snapshotting or dedicated tools) ensures each model is tied to the exact dataset and feature definitions used during training.&lt;br&gt;
Model registries store multiple versions, associated metadata, and stages (staging, production, archived) to control promotion and rollback.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-time example: Churn prediction for telco
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;In a typical telco churn project, teams maintain a dataset snapshot per training run and log model versions along with ROC-AUC and precision metrics.&lt;/li&gt;
&lt;li&gt;When customer behavior shifts, they compare new models against older baselines using the same validation data slice, making it easy to justify upgrading to a new version.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Practice 4: Testing and Validation
&lt;/h2&gt;

&lt;p&gt;MLOps extends testing from unit and integration tests to include data validation, training validation, and pre-deployment model checks.&lt;br&gt;
Common tests include schema checks, null/imbalance detection, and performance guardrails that must be met before release.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-time example: Credit risk scoring
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A financial services team enforces a rule that no new credit scoring model can be deployed if its default rate exceeds a defined threshold on a holdout dataset.&lt;/li&gt;
&lt;li&gt;The CI pipeline fails the deployment job if fairness or performance metrics fail, forcing data scientists to adjust features or retrain before trying again.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Practice 5: Monitoring, Drift, and Feedback Loops
&lt;/h2&gt;

&lt;p&gt;Production monitoring covers both system metrics (latency, errors) and ML-specific metrics (prediction distributions, data drift, concept drift).&lt;br&gt;
Alerts notify teams when live data deviates from training data or when key KPIs like accuracy or revenue impact degrade.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-time example: Real-time recommendation system
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Streaming recommenders (e.g., in media or e-commerce) track click-through rate and engagement per model version to catch degradation quickly.&lt;/li&gt;
&lt;li&gt;When performance drops beyond a threshold, an automated retraining job runs on fresh interaction data, and a new candidate model is A/B tested against the current one.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Practice 6: Observability and Scaling on Kubernetes
&lt;/h2&gt;

&lt;p&gt;For teams on Kubernetes, observability stacks (Prometheus, Grafana, OpenTelemetry) are integrated with inference services and pipelines.&lt;br&gt;
Autoscaling based on CPU, GPU, or custom metrics keeps latency acceptable while controlling cost for training and inference workloads.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-time example: MLOps platform on Amazon EKS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;An AWS reference architecture shows MLOps platforms running on EKS with custom metrics (queue depth, request rate) feeding Horizontal Pod Autoscalers.&lt;/li&gt;
&lt;li&gt;This setup allows bursty training jobs and variable traffic inference endpoints to scale up and down without manual intervention.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Practice 7: Governance, Security, and Compliance
&lt;/h2&gt;

&lt;p&gt;MLOps includes strict access control, audit logging, and approvals for datasets, experiments, and deployments, especially in regulated domains.&lt;br&gt;
Policy-as-code ensures only compliant models and data sources can be used in production pipelines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-time example: Healthcare diagnosis models
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Healthcare ML workflows enforce PHI handling rules, encrypt data at rest and in transit, and maintain audit logs of each training run and model promotion.&lt;/li&gt;
&lt;li&gt;Before deployment, a multi-step approval (data steward, ML lead, compliance officer) is required, codified directly into the release pipeline.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Practice 8: Start Small and Iterate
&lt;/h2&gt;

&lt;p&gt;Successful teams adopt MLOps gradually, starting with one project and incrementally standardizing patterns, libraries, and platforms.&lt;br&gt;
They invest early in training and shared tooling so data scientists and engineers collaborate on a common platform rather than building siloed, one-off pipelines.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-time example: First MLOps project
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;A typical first project is a simple binary classifier (e.g., churn or lead scoring) where teams pilot experiment tracking, CI/CD, and monitoring end to end.&lt;/li&gt;
&lt;li&gt;Lessons from this project feed into an internal template or cookie-cutter repository that becomes the default for all future ML services.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Apply This as a DevOps/MLOps Engineer
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Standardize infrastructure: Use Kubernetes, Terraform, and Helm for ML workloads to reuse your existing DevOps muscle.&lt;/li&gt;
&lt;li&gt;Add ML-aware stages to pipelines: Extend current CI/CD (e.g., Jenkins/GitHub Actions) with data checks, training jobs, and automatic evaluation gates.&lt;/li&gt;
&lt;li&gt;Build a minimal platform: Start with experiment tracking, a model registry, and basic monitoring, then layer advanced features like drift detection and A/B testing.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>machinelearning</category>
      <category>datascience</category>
      <category>ai</category>
      <category>aiops</category>
    </item>
    <item>
      <title>MLOps : Feature Engineering Technique and Process, Where most of the time have been spent for extracting solutions.</title>
      <dc:creator>Giri Dharan</dc:creator>
      <pubDate>Wed, 17 Dec 2025 07:49:05 +0000</pubDate>
      <link>https://forem.com/giridharan_devops/mlops-feature-engineering-technique-and-process-where-most-of-the-time-have-been-spent-for-2g3h</link>
      <guid>https://forem.com/giridharan_devops/mlops-feature-engineering-technique-and-process-where-most-of-the-time-have-been-spent-for-2g3h</guid>
      <description>&lt;p&gt;Feature engineering is the process of transforming raw data into meaningful input features that help a machine learning model learn better and make more accurate predictions. It’s often said that “garbage in, garbage out” — no matter how fancy the algorithm, a model can only perform as well as the quality of its features.&lt;/p&gt;

&lt;p&gt;In this blog, we’ll explain what feature engineering is, why it matters, and walk through a real‑world example using the well‑known Titanic survival dataset .&lt;/p&gt;




&lt;h3&gt;
  
  
  What is a “feature”?
&lt;/h3&gt;

&lt;p&gt;In machine learning, a &lt;strong&gt;feature&lt;/strong&gt; is an individual measurable property or characteristic of the data that the model uses as input. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In a house price prediction model, features might be: &lt;code&gt;bedrooms&lt;/code&gt;, &lt;code&gt;area_sqft&lt;/code&gt;, &lt;code&gt;age_of_house&lt;/code&gt;, &lt;code&gt;location&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;In a customer churn model, features could be: &lt;code&gt;monthly_spend&lt;/code&gt;, &lt;code&gt;days_since_last_login&lt;/code&gt;, &lt;code&gt;number_of_support_tickets&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;strong&gt;target&lt;/strong&gt; (or label) is what we want to predict, like &lt;code&gt;price&lt;/code&gt; or &lt;code&gt;churned&lt;/code&gt; (yes/no).&lt;/p&gt;




&lt;h3&gt;
  
  
  What is feature engineering?
&lt;/h3&gt;

&lt;p&gt;Feature engineering is the art and science of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Selecting&lt;/strong&gt; which raw variables to use as features.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transforming&lt;/strong&gt; them (scaling, encoding, binning, etc.).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creating&lt;/strong&gt; new features from existing ones (e.g., ratios, aggregations, time‑based features).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal is to make the patterns in the data more obvious to the model, so it can learn faster and generalize better to unseen data.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why is feature engineering important?
&lt;/h3&gt;

&lt;p&gt;Even with powerful algorithms like XGBoost or deep learning, good feature engineering often has a bigger impact on model performance than hyperparameter tuning. Here’s why:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Better patterns&lt;/strong&gt;: Raw data (like dates, text, or categories) may not be in a form that models can easily understand; engineering converts them into numerical signals.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handles noise and missing data&lt;/strong&gt;: Techniques like imputation, outlier handling, and normalization make the data more robust .
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduces dimensionality&lt;/strong&gt;: Removing irrelevant features or combining correlated ones can speed up training and reduce overfitting.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improves interpretability&lt;/strong&gt;: Well‑engineered features (like &lt;code&gt;age_group&lt;/code&gt; instead of raw &lt;code&gt;age&lt;/code&gt;) are easier for humans to understand.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In real‑time ML systems (like fraud detection or recommendations), feature engineering also affects latency and scalability, since features must be computed quickly on streaming data.&lt;/p&gt;




&lt;h3&gt;
  
  
  Real‑world example: Titanic survival prediction
&lt;/h3&gt;

&lt;p&gt;Let’s walk through feature engineering on the classic Titanic dataset, where the goal is to predict whether a passenger survived the disaster.&lt;/p&gt;

&lt;h4&gt;
  
  
  Raw dataset (first few rows)
&lt;/h4&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;PassengerId&lt;/th&gt;
&lt;th&gt;Survived&lt;/th&gt;
&lt;th&gt;Pclass&lt;/th&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Sex&lt;/th&gt;
&lt;th&gt;Age&lt;/th&gt;
&lt;th&gt;SibSp&lt;/th&gt;
&lt;th&gt;Parch&lt;/th&gt;
&lt;th&gt;Ticket&lt;/th&gt;
&lt;th&gt;Fare&lt;/th&gt;
&lt;th&gt;Cabin&lt;/th&gt;
&lt;th&gt;Embarked&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Braund, Mr. Owen&lt;/td&gt;
&lt;td&gt;male&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;A/5 21171&lt;/td&gt;
&lt;td&gt;7.25&lt;/td&gt;
&lt;td&gt;NaN&lt;/td&gt;
&lt;td&gt;S&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Cumings, Mrs. John&lt;/td&gt;
&lt;td&gt;female&lt;/td&gt;
&lt;td&gt;38&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;PC 17599&lt;/td&gt;
&lt;td&gt;71.28&lt;/td&gt;
&lt;td&gt;C85&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Heikkinen, Miss. Laina&lt;/td&gt;
&lt;td&gt;female&lt;/td&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;STON/O2. 3101282&lt;/td&gt;
&lt;td&gt;7.925&lt;/td&gt;
&lt;td&gt;NaN&lt;/td&gt;
&lt;td&gt;S&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Target: &lt;code&gt;Survived&lt;/code&gt; (0 = No, 1 = Yes)&lt;br&gt;&lt;br&gt;
Features: everything else.&lt;/p&gt;


&lt;h3&gt;
  
  
  Step 1: Handle missing values
&lt;/h3&gt;

&lt;p&gt;Real data is messy; many passengers have missing &lt;code&gt;Age&lt;/code&gt; or &lt;code&gt;Cabin&lt;/code&gt; values.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Age&lt;/strong&gt;: Instead of dropping rows, impute missing ages with the median age of passengers in the same &lt;code&gt;Pclass&lt;/code&gt; (ticket class) .
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Age&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;groupby&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Pclass&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Age&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fillna&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;median&lt;/span&gt;&lt;span class="p"&gt;()))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cabin&lt;/strong&gt;: Since many are missing, create a binary feature &lt;code&gt;HasCabin&lt;/code&gt; (1 if cabin is known, 0 otherwise) .
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;HasCabin&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Cabin&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;notna&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;astype&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Embarked&lt;/strong&gt;: Only 2 missing; fill with the most frequent port (‘S’ for Southampton) .&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  Step 2: Encode categorical variables
&lt;/h3&gt;

&lt;p&gt;Models like logistic regression or tree‑based models need numbers, not text .&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sex&lt;/strong&gt;: Convert &lt;code&gt;male&lt;/code&gt;/&lt;code&gt;female&lt;/code&gt; to 0/1 .
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Sex&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Sex&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;male&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;female&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Embarked&lt;/strong&gt;: Use one‑hot encoding to create three binary columns: &lt;code&gt;Embarked_S&lt;/code&gt;, &lt;code&gt;Embarked_C&lt;/code&gt;, &lt;code&gt;Embarked_Q&lt;/code&gt; .
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_dummies&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Embarked&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;prefix&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Embarked&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Create new features (feature construction)
&lt;/h3&gt;

&lt;p&gt;This is where domain knowledge shines: we create features that capture meaningful patterns .&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Family size&lt;/strong&gt;: Combine &lt;code&gt;SibSp&lt;/code&gt; (siblings/spouses) and &lt;code&gt;Parch&lt;/code&gt; (parents/children) to get total family members on board .
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;FamilySize&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SibSp&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Parch&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;  &lt;span class="c1"&gt;# +1 for the passenger
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IsAlone&lt;/strong&gt;: Flag passengers traveling alone (FamilySize = 1) .
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;IsAlone&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;FamilySize&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;astype&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Title from Name&lt;/strong&gt;: Extract titles like “Mr.”, “Mrs.”, “Miss”, “Master” from the &lt;code&gt;Name&lt;/code&gt; field, then group rare titles into a single category .
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; ([A-Za-z]+)\.&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;expand&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Lady&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Countess&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Capt&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Col&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Don&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Dr&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Major&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Rev&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Sir&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Jonkheer&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Dona&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Rare&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mlle&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Miss&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Ms&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Miss&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mme&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Mrs&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_dummies&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;prefix&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Age group&lt;/strong&gt;: Bin &lt;code&gt;Age&lt;/code&gt; into categories like child, young adult, adult, senior .
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;AgeGroup&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cut&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Age&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;bins&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;labels&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fare per person&lt;/strong&gt;: Divide &lt;code&gt;Fare&lt;/code&gt; by &lt;code&gt;FamilySize&lt;/code&gt; to get fare per person, which may be more meaningful than total fare .
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;FarePerPerson&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Fare&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;FamilySize&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Scale numerical features (optional)
&lt;/h3&gt;

&lt;p&gt;Some algorithms (like SVM, logistic regression with regularization) perform better when features are on a similar scale .&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use standardization (mean=0, std=1) or min‑max scaling on continuous features like &lt;code&gt;Age&lt;/code&gt;, &lt;code&gt;Fare&lt;/code&gt;, &lt;code&gt;FarePerPerson&lt;/code&gt; .
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sklearn.preprocessing&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;StandardScaler&lt;/span&gt;
  &lt;span class="n"&gt;scaler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;StandardScaler&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Age&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Fare&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;FarePerPerson&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;scaler&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fit_transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Age&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Fare&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;FarePerPerson&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Tree‑based models (Random Forest, XGBoost) are less sensitive to scaling, so this step is optional depending on the model choice .&lt;/p&gt;


&lt;h3&gt;
  
  
  Step 5: Drop irrelevant columns
&lt;/h3&gt;

&lt;p&gt;Remove columns that won’t be used as features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;PassengerId&lt;/code&gt;, &lt;code&gt;Name&lt;/code&gt;, &lt;code&gt;Ticket&lt;/code&gt;, &lt;code&gt;Cabin&lt;/code&gt; (we already used &lt;code&gt;HasCabin&lt;/code&gt;) .&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Final feature set might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pclass, Sex, Age, SibSp, Parch, Fare, HasCabin,
FamilySize, IsAlone, AgeGroup, FarePerPerson,
Embarked_S, Embarked_C, Embarked_Q,
Title_Master, Title_Miss, Title_Mr, Title_Mrs, Title_Rare
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  How this helps the model
&lt;/h3&gt;

&lt;p&gt;After feature engineering, the model sees:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;More signal&lt;/strong&gt;: &lt;code&gt;FamilySize&lt;/code&gt; and &lt;code&gt;IsAlone&lt;/code&gt; capture social context; &lt;code&gt;Title&lt;/code&gt; captures social status, which historically influenced survival .
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cleaner input&lt;/strong&gt;: Missing values are handled, categories are encoded, and numerical features are scaled .
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better generalization&lt;/strong&gt;: The model can now learn that, for example, women, children, and higher‑class passengers had higher survival rates, using these engineered features .&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In practice, a simple model (like Logistic Regression) trained on well‑engineered features often outperforms a complex model on raw data.&lt;/p&gt;




&lt;h3&gt;
  
  
  Feature engineering in real‑time ML
&lt;/h3&gt;

&lt;p&gt;In production systems (e.g., real‑time fraud detection), feature engineering must be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fast&lt;/strong&gt;: Features computed on the fly from streaming events (e.g., “number of transactions in last 5 minutes”) .
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistent&lt;/strong&gt;: The same transformations used in training must be applied at inference time.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Maintainable&lt;/strong&gt;: Features are often stored in a &lt;strong&gt;feature store&lt;/strong&gt; so they can be reused across models and pipelines .&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, in a real‑time recommendation system, features like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;user_avg_session_duration_last_7d&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;item_popularity_score_last_hour&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;time_since_last_purchase&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;are computed continuously from event streams and served to the model with low latency.&lt;/p&gt;




&lt;h3&gt;
  
  
  Best practices
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start simple&lt;/strong&gt;: Begin with basic transformations (handle missing values, encode categories) before adding complex features.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use domain knowledge&lt;/strong&gt;: Talk to business experts to understand what features might matter (e.g., “VIP customers” in churn prediction).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Iterate and validate&lt;/strong&gt;: Use cross‑validation to measure if a new feature actually improves performance .
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Avoid data leakage&lt;/strong&gt;: Never use future information (e.g., “average future spend”) in features; only use data available at prediction time .
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document features&lt;/strong&gt;: Maintain a feature catalog so everyone knows what each feature means and how it’s computed.&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;Feature engineering turns messy, raw data into clean, meaningful inputs that help ML models learn effectively . In the Titanic example, simple steps like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Imputing missing &lt;code&gt;Age&lt;/code&gt;,
&lt;/li&gt;
&lt;li&gt;Creating &lt;code&gt;FamilySize&lt;/code&gt; and &lt;code&gt;IsAlone&lt;/code&gt;,
&lt;/li&gt;
&lt;li&gt;Extracting &lt;code&gt;Title&lt;/code&gt; from names,
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;can significantly boost model performance .&lt;/p&gt;

&lt;p&gt;In real‑time ML, feature engineering becomes even more critical: it directly impacts prediction accuracy, latency, and system scalability . Investing time in thoughtful feature engineering is one of the most effective ways to build robust, high‑performing ML systems.&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>datascience</category>
      <category>aiops</category>
      <category>database</category>
    </item>
    <item>
      <title>MLOps: Exploratory Data Analysis [EDA] Deriving Solutions with Statistics Leads to Fearure Engineering.</title>
      <dc:creator>Giri Dharan</dc:creator>
      <pubDate>Sun, 14 Dec 2025 16:18:25 +0000</pubDate>
      <link>https://forem.com/giridharan_devops/mlops-exploratory-data-analysis-eda-deriving-solutions-with-statistics-leads-to-fearure-35a5</link>
      <guid>https://forem.com/giridharan_devops/mlops-exploratory-data-analysis-eda-deriving-solutions-with-statistics-leads-to-fearure-35a5</guid>
      <description>&lt;p&gt;Exploratory Data Analysis (EDA) is the phase where a data scientist aggressively “interrogates” the dataset before trusting any model or dashboard. A good EDA feels like debugging reality: you move from raw, messy data to a clear mental model of how the system behaves in the real world. &lt;/p&gt;

&lt;h2&gt;
  
  
  What EDA Really Is
&lt;/h2&gt;

&lt;p&gt;EDA is a set of practices for understanding structure, quality, and signal in data using summary statistics and visualization. It helps uncover patterns, anomalies, and relationships between variables, and validates whether the data can actually answer the business question. &lt;/p&gt;

&lt;p&gt;From a data scientist’s point of view, EDA is where you translate stakeholder questions into hypotheses and test them quickly on the data.  Decisions made here directly drive feature engineering, model choice, and even whether the problem is solvable as stated. &lt;/p&gt;

&lt;h2&gt;
  
  
  A Real-World Dataset Example
&lt;/h2&gt;

&lt;p&gt;Consider an e‑commerce company that wants to reduce cart abandonment and improve revenue. The analytics team has a transactional dataset with columns like &lt;code&gt;order_id&lt;/code&gt;, &lt;code&gt;user_id&lt;/code&gt;, &lt;code&gt;product_id&lt;/code&gt;, &lt;code&gt;price&lt;/code&gt;, &lt;code&gt;quantity&lt;/code&gt;, &lt;code&gt;timestamp&lt;/code&gt;, &lt;code&gt;device_type&lt;/code&gt;, &lt;code&gt;traffic_source&lt;/code&gt;, and a label &lt;code&gt;order_status&lt;/code&gt; (completed/cancelled/abandoned). &lt;/p&gt;

&lt;p&gt;Alternatively, you can practice the same process on public datasets such as retail sales, wine quality, or Iris in Kaggle or learning portals, which provide realistic structure and common data issues.  For instance, wine quality data has physicochemical features (alcohol, acidity, chlorides) and a quality score, making it ideal for exploring correlations, outliers, and feature importance. &lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Clarify the Problem
&lt;/h2&gt;

&lt;p&gt;Before touching code, a data scientist frames EDA around decisions, not just plots.  For the e‑commerce case, stakeholders might ask: “Which traffic sources produce high-value customers?”, “What patterns precede abandonment?”, or “Which device types correlate with higher conversion?”. &lt;/p&gt;

&lt;p&gt;Each question becomes a hypothesis, such as “Mobile users from paid social have lower average order value than desktop users from organic search”.  EDA then becomes a structured attempt to confirm or reject such hypotheses using the dataset. &lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Load Data and Sanity Check
&lt;/h2&gt;

&lt;p&gt;Using Python, a typical workflow starts with Pandas, NumPy, and visualization libraries such as Matplotlib and Seaborn. The first inspection uses commands like shape, head, info, and describe to understand size, schema, data types, and basic distributions. &lt;/p&gt;

&lt;p&gt;On real transactional data, this often reveals mixed types (numbers stored as strings), unexpected nulls in key fields, and skewed distributions (e.g., many small orders, few large ones).  At this point, a data scientist often notes potential data quality issues to discuss with data engineering or the product team.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Data Cleaning in Practice
&lt;/h2&gt;

&lt;p&gt;Cleaning is not a separate pre‑processing step; it is tightly integrated into EDA loops. With the e‑commerce dataset, common actions include parsing timestamps to proper datetime, ensuring numeric types for price and quantity, standardizing categorical values, and removing or flagging clearly invalid rows (like negative quantities). &lt;/p&gt;

&lt;p&gt;Missing values are handled based on business meaning: missing &lt;code&gt;traffic_source&lt;/code&gt; might be grouped into “unknown”, while missing &lt;code&gt;price&lt;/code&gt; or &lt;code&gt;user_id&lt;/code&gt; may invalidate an order for downstream analysis and should be dropped or investigated.  For continuous features such as &lt;code&gt;alcohol&lt;/code&gt; in a wine dataset, data scientists may impute nulls using domain‑aware strategies like median or model‑based imputation, validating that this does not distort distributions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Univariate Exploration
&lt;/h2&gt;

&lt;p&gt;Univariate EDA focuses on one variable at a time to understand its distribution and potential issues.  For numeric features (e.g., order value, alcohol content, petal length), data scientists typically use histograms, KDE plots, and box plots to assess skewness, heavy tails, and outliers. &lt;/p&gt;

&lt;p&gt;For categorical features such as device type, traffic source, or quality score, bar plots and frequency tables show dominant categories, rare levels, and potential encoding issues.  These views drive early decisions: for example, highly imbalanced quality labels may suggest resampling strategies later in modeling. &lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Bivariate and Multivariate Analysis
&lt;/h2&gt;

&lt;p&gt;Bivariate analysis explores relationships between two variables, often through scatter plots, grouped boxplots, and grouped aggregations.  In e‑commerce data, this might mean plotting average order value by device type or conversion rate by traffic source to detect actionable differences. &lt;/p&gt;

&lt;p&gt;Multivariate analysis adds structure using correlation matrices, pair plots, and grouped aggregations over multiple dimensions. In wine quality or Iris datasets, a correlation heatmap can highlight which physicochemical properties or flower dimensions move together and which are independent, shaping feature selection and model complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Outliers, Anomalies, and Data Quality
&lt;/h2&gt;

&lt;p&gt;Real‑time or real‑world datasets are rarely clean and often include anomalies such as duplicate orders, impossible timestamps, or extreme values from logging bugs. Data scientists detect these using visual methods (box plots, scatter plots), statistical rules (z‑score, IQR), and domain logic (e.g., orders over a certain amount must be manually verified). &lt;/p&gt;

&lt;p&gt;The treatment of outliers is a business decision: for fraud analysis, outliers might be the most important records, while for average customer behavior, they might be capped or excluded to prevent skewed metrics. EDA leads to an explicit policy on whether to keep, transform, or remove such records before modeling. &lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Feature Engineering Ideas from EDA
&lt;/h2&gt;

&lt;p&gt;Effective EDA naturally suggests transformations and new features.  In the e‑commerce example, a data scientist might derive features such as session length, number of items per order, time of day, days since last purchase, or rolling spend per user over the last 30 days. &lt;/p&gt;

&lt;p&gt;For wine quality, EDA might indicate that a ratio (like sulphates to acidity) or binned alcohol levels capture more interpretable patterns than raw continuous values.  These engineered features are grounded in observed relationships and domain intuition, improving both model performance and explainability. &lt;/p&gt;

&lt;h2&gt;
  
  
  Step 8: Communicating EDA Findings
&lt;/h2&gt;

&lt;p&gt;EDA is only valuable if the insights reach stakeholders in a way that influences decisions. Data scientists often distill EDA into a short narrative: the business questions, key data issues, main patterns discovered, and recommendations for modeling or product changes.&lt;/p&gt;

&lt;p&gt;This narrative is typically supported by a small set of high‑signal visualizations and summary tables, rather than every chart produced during exploration. Well‑documented EDA also becomes a reference for future team members, improving reproducibility and saving time when the dataset is reused.&lt;/p&gt;

&lt;h2&gt;
  
  
  Typical EDA Focus for Data Scientists
&lt;/h2&gt;

&lt;p&gt;From a data scientist’s perspective, EDA priorities differ slightly from those of a pure analyst or data engineer. The focus is on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Checking whether label and features are consistent with the modeling problem (e.g., no label leakage, enough positive cases). &lt;/li&gt;
&lt;li&gt;Understanding variance and correlations to anticipate model bias, variance, and feature redundancy. &lt;/li&gt;
&lt;li&gt;Identifying data shifts or seasonality that may require time‑aware validation and monitoring strategies. &lt;/li&gt;
&lt;li&gt;Surfacing data quality risks early so that they can be mitigated via cleaning, robust metrics, or feature design. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you share which dataset you want to target first (for example Kaggle sales data, Iris, wine quality, or a custom CSV), a tailored EDA notebook outline can be structured for you with concrete Pandas and Seaborn code blocks.&lt;/p&gt;

</description>
      <category>mlops</category>
      <category>devops</category>
      <category>datascience</category>
      <category>ai</category>
    </item>
    <item>
      <title>Data Engineering Processes: From Raw Data to Cleaned, Processed, Analytics-Ready Data.</title>
      <dc:creator>Giri Dharan</dc:creator>
      <pubDate>Sun, 14 Dec 2025 15:04:47 +0000</pubDate>
      <link>https://forem.com/giridharan_devops/data-engineering-processes-from-raw-data-to-cleaned-processed-analytics-ready-data-94l</link>
      <guid>https://forem.com/giridharan_devops/data-engineering-processes-from-raw-data-to-cleaned-processed-analytics-ready-data-94l</guid>
      <description>&lt;p&gt;A practical way to explain the data engineering process is to walk through a realistic dataset end to end. This blog-style write‑up treats the journey from raw data to analytics‑ready tables from a data engineer’s point of view.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem context
&lt;/h2&gt;

&lt;p&gt;Imagine a product analytics team that wants to understand user behavior on an e‑commerce platform. The team tracks user sign‑ups, product views, cart additions, and purchases across web and mobile. As a data engineer, the goal is to design pipelines that reliably deliver clean, well‑modeled data to analysts and data scientists. The example dataset will be event data from application logs combined with reference data from operational databases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding sources and requirements
&lt;/h2&gt;

&lt;p&gt;The first step is clarifying business questions and mapping them to data sources. Typical questions include: “What is the conversion rate from product view to purchase by channel?” or “Which campaigns bring the highest lifetime value customers?”. To answer these, the pipeline must bring together events from tracking logs, user profiles from a customer database, and product metadata from a catalog system.&lt;/p&gt;

&lt;p&gt;From a data engineering perspective, this phase also includes non‑functional requirements. These cover data latency (near real‑time vs hourly), expected volume, quality SLAs, and regulatory constraints such as retention and PII handling. Clear requirements drive architectural decisions like batch vs streaming, storage layers, and orchestration tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Raw dataset example
&lt;/h2&gt;

&lt;p&gt;Consider three core datasets for this project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;events_raw: clickstream‑style records with fields such as event_id, user_id, event_type (sign_up, product_view, add_to_cart, purchase), product_id, device_type, event_timestamp, and metadata (JSON).&lt;/li&gt;
&lt;li&gt;users_dim_source: a daily snapshot from the user management system with user_id, signup_date, country, marketing_channel, and is_deleted flags.&lt;/li&gt;
&lt;li&gt;products_dim_source: product catalog exports with product_id, category, brand, price, currency, and active flags.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These sources are messy in practice. Event data may arrive late or out of order, mobile apps may send malformed payloads, and operational teams might change schemas without notice. The data engineer’s job is to create a resilient ingestion layer that can tolerate these realities while preserving lineage and reproducibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ingestion and landing
&lt;/h2&gt;

&lt;p&gt;For ingestion, assume events are pushed into a message broker (like Kafka or Kinesis) and then written to cloud storage in partitioned files. A common pattern is to partition events_raw by event_date (derived from event_timestamp) and possibly by event_type. This layout improves downstream query performance and simplifies backfills.&lt;/p&gt;

&lt;p&gt;Relational sources like users_dim_source and products_dim_source are usually pulled via scheduled jobs, using CDC (change data capture) or timestamp‑based incremental extracts. In a modern stack, these extracts land in a “raw” or “bronze” layer where data is stored with minimal transformation, preserving the source shape for audit and reprocessing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cleaning and standardization
&lt;/h2&gt;

&lt;p&gt;Once data lands, the next step is basic hygiene. The pipeline enforces schema, handles corrupt records, and standardizes core fields like timestamps, IDs, and currencies. For the e‑commerce dataset, this might mean casting event_timestamp to a unified time zone, normalizing device_type values (web, ios, android), and validating that event_type belongs to a controlled list.&lt;/p&gt;

&lt;p&gt;PII and compliance considerations also live here. Email addresses, phone numbers, and names may be tokenized or moved to restricted tables, while event payloads are checked to ensure no sensitive data slips into free‑form fields. From a data engineer’s view, baking compliance into the pipeline early avoids painful retrofits later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Transformation and modeling
&lt;/h2&gt;

&lt;p&gt;With clean data, the focus shifts to turning raw assets into analytics‑ready models. A common approach is to move through “staging” to “core” or “silver/gold” layers. In staging, events_raw is exploded and normalized: JSON metadata fields are parsed into explicit columns, and invalid combinations (such as purchase events without product_id) are flagged.&lt;/p&gt;

&lt;p&gt;Core models then aggregate and join this staged data. For example, a user_events table might combine events with user attributes, while a product_performance_daily table summarizes metrics such as views, add_to_carts, and purchases per product per day. Slow changing dimensions can be implemented for users and products to capture history, so analysts see attributes as they were at the time of each event.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example modeled tables
&lt;/h2&gt;

&lt;p&gt;Two key tables that emerge from this pipeline are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fact_user_session: each row represents a user session with fields like user_id, session_id, session_start, session_end, session_channel, session_device, total_events, and session_revenue. Sessions are derived by grouping events by user and breaking on inactivity thresholds.&lt;/li&gt;
&lt;li&gt;fact_product_funnel_daily: aggregated by date, product_id, and channel, containing counts of users and events at each funnel stage (viewed, added_to_cart, purchased) plus conversion rates between stages.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tables sit alongside users_dim and products_dim, which are cleaned and conformed dimension tables suitable for BI tools. Together, they form a simple star schema, making it easier for downstream users to create dashboards and ad‑hoc queries without deciphering raw event structures.&lt;/p&gt;

&lt;h2&gt;
  
  
  Orchestration and reliability
&lt;/h2&gt;

&lt;p&gt;To keep these pipelines reliable, an orchestration layer coordinates the various steps: ingestion, staging, transformations, and quality checks. Dependencies are explicitly modeled so that failures in upstream jobs prevent incomplete data from flowing downstream. Data engineers also add monitoring on job runtimes, row counts, and key metrics like daily active users or total revenue to detect anomalies.&lt;/p&gt;

&lt;p&gt;Data quality tests are embedded as first‑class citizens. Examples include checking uniqueness of event_id, ensuring non‑null user_id for logged‑in events, and validating that revenue numbers stay within expected ranges. When tests fail, the system alerts engineers or rolls back deployments, preserving trust in the platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  Incremental processing and backfills
&lt;/h2&gt;

&lt;p&gt;The pipeline should be incremental to scale with data volume. For events, this means processing only new partitions (for example, yesterday’s data) while keeping the ability to reprocess historical windows when bugs or logic changes occur. Dimension tables can use CDC or surrogate keys to gracefully handle late‑arriving updates.&lt;/p&gt;

&lt;p&gt;Backfills are a fact of life in data engineering. A schema change, a tracking bug, or a new business rule can necessitate recomputing months of data. Good practice is to design transformations as idempotent and partition‑aware, so re‑running jobs for a given date range is straightforward and does not corrupt production tables.&lt;/p&gt;

&lt;h2&gt;
  
  
  Serving and collaboration
&lt;/h2&gt;

&lt;p&gt;Finally, the engineered data is served to end consumers in the right formats and tools. BI analysts connect to curated schemas for dashboarding, data scientists access more granular tables for modeling, and downstream applications might read specific aggregates through APIs. As a data engineer, part of the job is to document datasets, publish examples, and collect feedback on what works and what is missing.&lt;/p&gt;

&lt;p&gt;The data engineering process is not a one‑off project but an ongoing collaboration. As product features change and business questions evolve, new events are added, models are refactored, and pipelines are optimized. The dataset example shows how a data engineer thinks in terms of systems, contracts, and lifecycle, always working to make data more trustworthy and more useful for the rest of the organization.&lt;/p&gt;

</description>
      <category>dataengineering</category>
      <category>python</category>
      <category>devops</category>
      <category>datascience</category>
    </item>
    <item>
      <title>MLOps: Data Science Lifecycle with DataSets examples, Workflows and Pipelines.</title>
      <dc:creator>Giri Dharan</dc:creator>
      <pubDate>Sun, 14 Dec 2025 14:13:16 +0000</pubDate>
      <link>https://forem.com/giridharan_devops/mlops-data-science-lifecycle-with-datasets-examples-workflows-and-pipelines-164e</link>
      <guid>https://forem.com/giridharan_devops/mlops-data-science-lifecycle-with-datasets-examples-workflows-and-pipelines-164e</guid>
      <description>&lt;p&gt;A data science lifecycle describes how raw data moves from business problem to deployed model, while workflows and pipelines define how the work is organized and automated end to end.The CRISP‑DM framework is a widely used way to structure this lifecycle, and real datasets like the Titanic survival data or vehicle price data illustrate each phase concretely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data science lifecycle
&lt;/h2&gt;

&lt;p&gt;The CRISP‑DM lifecycle has six main phases: business understanding, data understanding, data preparation, modeling, evaluation, and deployment.These phases are iterative rather than strictly linear, so projects often loop back from modeling or evaluation to earlier steps as new insights appear.&lt;/p&gt;

&lt;p&gt;Another common view is the OSEMN lifecycle: Obtain, Scrub, Explore, Model, and iNterpret.Both CRISP‑DM and OSEMN emphasize that most effort goes into understanding and preparing data rather than just training models.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflow vs pipeline
&lt;/h2&gt;

&lt;p&gt;A workflow is the logical sequence of tasks a team follows (for example: define KPI → collect data → clean → train → review → deploy).A pipeline is a more automated, usually code‑driven realization of this workflow, chaining steps such as preprocessing, feature engineering, model training, and evaluation so they can run repeatedly and reliably.&lt;/p&gt;

&lt;p&gt;In modern practice, workflows are designed with both business and technical constraints in mind, and then implemented as pipelines that manage dependencies and ensure data flows smoothly from one stage to the next.This separation allows experimentation at the workflow level while keeping execution consistent and reproducible at the pipeline level.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example lifecycle: Titanic dataset
&lt;/h2&gt;

&lt;p&gt;A classic real dataset for end‑to‑end projects is the Titanic passenger survival dataset hosted on Kaggle.It contains information such as passenger class, sex, age, and fare, with a label indicating whether each passenger survived, making it suitable for a supervised classification pipeline.&lt;/p&gt;

&lt;p&gt;Using CRISP‑DM with this dataset:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Business understanding: Define the goal as predicting passenger survival given known attributes, analogous to predicting customer churn or loan default in real businesses.Success could be measured using metrics like accuracy or F1 score on unseen passengers.&lt;/li&gt;
&lt;li&gt;Data understanding: Load the CSV files from Kaggle, inspect columns, visualize distributions (for instance age distribution by survival), and check missing values in features like age and cabin. This step reveals data quality issues and signals which engineered features might be helpful, such as family size or ticket groupings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data preparation: Handle missing ages (for example by imputing based on class and sex), encode categorical variables like sex and embarked port, and create features such as “family size” or “title” extracted from names.The prepared dataset is then split into training and validation subsets while keeping the target label (survived) separate.&lt;/li&gt;
&lt;li&gt;Modeling: Train baseline models such as logistic regression, decision trees, and random forests using the engineered features. Hyperparameter tuning (for example grid search for tree depth or number of estimators) refines model performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Evaluation: Compare models using cross‑validation and validation metrics, checking not only overall accuracy but also how well the model distinguishes survivors from non‑survivors.Feature importance analysis from tree‑based models highlights which attributes (for example sex, passenger class, and family size) drive predictions.&lt;/li&gt;
&lt;li&gt;Deployment: In the Kaggle competition context, deployment means generating predictions for a held‑out test set and submitting a CSV for scoring on a public leaderboard.In a real product, the same pipeline structure could be wrapped behind an API so new passenger‑like records receive live predictions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Example lifecycle: Vehicle price prediction
&lt;/h2&gt;

&lt;p&gt;A more business‑oriented example is predicting used car prices, using the “vehicle dataset from Cardekho” and its associated car price prediction project.This dataset contains details such as car brand, model year, fuel type, mileage, and selling price, making it a typical regression problem for pricing or recommendation systems.&lt;/p&gt;

&lt;p&gt;The lifecycle plays out as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Business understanding: The objective is to estimate a fair selling price for a car, helping dealers or marketplaces optimize pricing and improve user trust. Success might be defined by low mean absolute error on historical sales and improved conversion rates when integrated into a platform.&lt;/li&gt;
&lt;li&gt;Data understanding and preparation: Analysts explore the distribution of prices across brands and model years, detect outliers, and handle missing or inconsistent entries.Data preparation includes encoding fuel type and transmission, deriving car age from registration year, and normalizing numerical features such as mileage and engine size.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modeling and evaluation: Several regression algorithms (for example linear regression, random forest, or gradient boosting) can be trained to predict price from features.Models are evaluated with regression metrics such as mean squared error and R² on validation sets to choose the best trade‑off between bias and variance.&lt;/li&gt;
&lt;li&gt;Deployment and monitoring: A selected model can be deployed as a web service that powers a “suggested price” widget on a listing page. Ongoing monitoring checks whether prediction errors drift over time as market conditions or car portfolios change, prompting retraining when needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  From workflow to production pipeline
&lt;/h2&gt;

&lt;p&gt;To operationalize these projects, teams define pipelines that automate data ingestion, transformation, training, and deployment. For example, a Python pipeline using libraries such as scikit‑learn might encapsulate preprocessing steps (like imputation and encoding) and model training in a single object, ensuring any new data is processed identically to training data.&lt;/p&gt;

&lt;p&gt;Beyond modeling code, a full data science pipeline integrates with storage and orchestration layers, sending ingested data through ETL or ELT processes into a data lake or warehouse before feeding models. Production pipelines typically include scheduled retraining jobs, automated evaluation against benchmarks, and deployment steps that update serving endpoints or batch scoring outputs with minimal manual intervention.&lt;/p&gt;

</description>
      <category>mlops</category>
      <category>datascience</category>
      <category>database</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>AttributeError: 'int' object has no attribute 'title' in python3</title>
      <dc:creator>Giri Dharan</dc:creator>
      <pubDate>Wed, 03 Dec 2025 16:21:08 +0000</pubDate>
      <link>https://forem.com/giridharan_devops/attributeerror-int-object-has-no-attribute-title-in-python3-4nji</link>
      <guid>https://forem.com/giridharan_devops/attributeerror-int-object-has-no-attribute-title-in-python3-4nji</guid>
      <description>&lt;p&gt;AttributeError: 'int' object has no attribute 'title' in python&lt;/p&gt;

&lt;p&gt;This error means you’re calling the string method .title on a value that is actually an int, not a str. In other words, somewhere a variable you expect to be text holds a number instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it happens
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Variable shadowing. A name you used for a string earlier was reassigned to an integer, so later obj.title tries to run on an int. For example: name = "alice"; name = 5; name.title() → error. This commonly happens when reusing names like file, time, or data for different types at different points of the code.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wrong data shape. You indexed or pulled data from a dict/list/JSON where some items are ints and others are strings, then you applied .title blindly to all items.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Type assumptions. User input or parsed values were cast to int (or loaded as numbers) before string operations are applied.  &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to fix quickly
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Find the line with .title and print or log the type and value just before it:

&lt;ul&gt;
&lt;li&gt;print(type(x), x) or use an assert: assert isinstance(x, str)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Convert to string if that’s acceptable for your logic:

&lt;ul&gt;
&lt;li&gt;str(x).title()&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Guard by type:

&lt;ul&gt;
&lt;li&gt;x = x.title() if isinstance(x, str) else x&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Clean data at the source:

&lt;ul&gt;
&lt;li&gt;When mapping over a collection: [s.title() for s in items if isinstance(s, str)]&lt;/li&gt;
&lt;li&gt;When reading JSON: coerce only desired fields to str before using .title&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Common patterns and remedies
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Reused names:

&lt;ul&gt;
&lt;li&gt;Problem: file = open(...); file = 123; file.title() → AttributeError&lt;/li&gt;
&lt;li&gt;Fix: Use distinct names (f for file handle, score for numbers).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Library/module shadowing:

&lt;ul&gt;
&lt;li&gt;Problem: import time; time = 3; time.time() breaks because time is now an int.&lt;/li&gt;
&lt;li&gt;Fix: Avoid reassigning imported names; or import as alias (import time as time_mod).
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Mixed-type collections:

&lt;ul&gt;
&lt;li&gt;Problem: for v in values: v.title()&lt;/li&gt;
&lt;li&gt;Fix: for v in values: if isinstance(v, str): v = v.title() else: handle int case.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  If you share a snippet
&lt;/h2&gt;

&lt;p&gt;Paste the few lines around where .title is called (and any variable assignments to that name earlier). Indicate expected types. A minimal reproducible example makes it straightforward to point to the exact reassignment or coercion causing the int.&lt;/p&gt;

&lt;p&gt;import os&lt;br&gt;
terminal_width = get_terminal_size().columns&lt;/p&gt;

&lt;p&gt;the_given_string = input("Enter your string: ")&lt;br&gt;
print(the_given_string.center(terminal_width.title()))&lt;br&gt;
print(the_given_string.ljust(terminal_width.title()))&lt;br&gt;
print(the_given_string.rjust(terminal_width.title()))&lt;/p&gt;

&lt;p&gt;The error happens because terminal_width is an int, but .title() is a string method, and center/ljust/rjust expect an int width, not a string. You should use the integer directly.&lt;/p&gt;

&lt;p&gt;Here is the corrected code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;shutil&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;get_terminal_size&lt;/span&gt;

&lt;span class="n"&gt;terminal_width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;get_terminal_size&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="n"&gt;columns&lt;/span&gt;  &lt;span class="c1"&gt;# this is an int
&lt;/span&gt;
&lt;span class="n"&gt;the_given_string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Enter your string: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;the_given_string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;center&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;terminal_width&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;the_given_string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ljust&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;terminal_width&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;the_given_string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rjust&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;terminal_width&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;NOTE::: NEED TO ADD .title() after the given string Variable.&lt;/p&gt;

&lt;p&gt;Key points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remove .title() on terminal_width; just pass terminal_width.
&lt;/li&gt;
&lt;li&gt;If you really needed to convert something to title case, that should be used on a string, e.g. some_string.title(), not on an int.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;in python3 instead of input function what can we use:&lt;/p&gt;

&lt;p&gt;In Python 3, &lt;code&gt;input()&lt;/code&gt; is the standard way to read from the keyboard; there is no direct replacement that you “should” use instead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Input in Python 3
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;input()&lt;/code&gt; always returns a string, so you convert it when you need numbers:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;n = int(input("Enter an integer: "))&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;x = float(input("Enter a float: "))&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;The old Python 2 functions:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;raw_input()&lt;/code&gt; → replaced by &lt;code&gt;input()&lt;/code&gt; in Python 3.
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;input()&lt;/code&gt; in Python 2 (which evaluated expressions) was removed for safety; there is no direct equivalent in Python 3, and evaluating user input is strongly discouraged.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Alternatives depending on context
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;For command‑line arguments: use &lt;code&gt;sys.argv&lt;/code&gt; or &lt;code&gt;argparse&lt;/code&gt; instead of &lt;code&gt;input()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;For reading from files or other streams: use file methods like &lt;code&gt;readline()&lt;/code&gt; or iterate over the file object.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you explain your exact use case (e.g., need numbers, expressions, command‑line options, etc.), more tailored alternatives can be suggested.&lt;/p&gt;

</description>
      <category>python</category>
      <category>programming</category>
      <category>devbugsmash</category>
      <category>help</category>
    </item>
    <item>
      <title>Start Python: To Advanced Topics from basic Strong Foundational concepts Roadmap.</title>
      <dc:creator>Giri Dharan</dc:creator>
      <pubDate>Mon, 24 Nov 2025 14:50:52 +0000</pubDate>
      <link>https://forem.com/giridharan_devops/start-python-to-advanced-topics-from-basic-strong-foundational-concepts-roadmap-1n88</link>
      <guid>https://forem.com/giridharan_devops/start-python-to-advanced-topics-from-basic-strong-foundational-concepts-roadmap-1n88</guid>
      <description>&lt;p&gt;To Build a solid Python career for any domain, follow a staged roadmap from foundational concepts to advanced topics, focusing on real-world applications and industry best practices. Here's a clear overview and the high-level advanced subjects you should master.&lt;/p&gt;

&lt;h2&gt;
  
  
  Python Roadmap for Any Domain Expertise
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Basics: Syntax, variables, data types, operators, I/O, control flow (if/else, loops), functions, error handling, and basic OOP principles.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Core Python: Data structures (lists, dictionaries, sets), file handling (including CSV and JSON), modules, packages, and virtual environments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Object-Oriented Programming: Classes, objects, inheritance, encapsulation, polymorphism, and special (dunder) methods.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Libraries and Frameworks: Core and popular modules (requests, NumPy, pandas, Matplotlib, Flask/Django for web development).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Working with APIs: Consuming REST APIs, serializing data, and practical HTTP requests.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Advanced Python Topics
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Iterators, generators, and generator expressions&lt;/li&gt;
&lt;li&gt;Decorators and closures&lt;/li&gt;
&lt;li&gt;Context managers (with custom implementations)&lt;/li&gt;
&lt;li&gt;Multithreading, multiprocessing, and asynchronous programming (async/await)&lt;/li&gt;
&lt;li&gt;Memory management and garbage collection&lt;/li&gt;
&lt;li&gt;Metaclasses and advanced OOP patterns&lt;/li&gt;
&lt;li&gt;Design patterns in Python (Factory, Singleton, Observer, etc.)&lt;/li&gt;
&lt;li&gt;Profiling and optimizing code&lt;/li&gt;
&lt;li&gt;Global Interpreter Lock (GIL) understanding&lt;/li&gt;
&lt;li&gt;Advanced data structures (linked lists, trees, graphs) and algorithms&lt;/li&gt;
&lt;li&gt;Concurrency and distributed systems&lt;/li&gt;
&lt;li&gt;Type hinting and static type checking (with mypy)&lt;/li&gt;
&lt;li&gt;Building and distributing Python packages&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Skills Expected at Senior Python Level
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Cloud integration (e.g., AWS, Azure)&lt;/li&gt;
&lt;li&gt;CI/CD pipeline design and automation&lt;/li&gt;
&lt;li&gt;Building scalable backends with frameworks like Django or FastAPI&lt;/li&gt;
&lt;li&gt;Database management (SQL and NoSQL)&lt;/li&gt;
&lt;li&gt;Security best practices in backend systems&lt;/li&gt;
&lt;li&gt;Version control workflows (Git)&lt;/li&gt;
&lt;li&gt;Code review and mentorship responsibilities&lt;/li&gt;
&lt;li&gt;Contribution to open source or creating your own packages&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Learning Approach
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Set small, achievable goals to stay motivated.&lt;/li&gt;
&lt;li&gt;Tackle hands-on projects early—web apps, automation scripts, data analysis, machine learning prototypes.&lt;/li&gt;
&lt;li&gt;Regularly review code, read advanced documentation, and solve coding challenges.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These guidelines provide a proven path for continuous advancement, whether you're aiming for backend engineering, automation, data science, or DevOps with Python.&lt;/p&gt;

</description>
      <category>python</category>
      <category>programming</category>
      <category>productivity</category>
      <category>automation</category>
    </item>
    <item>
      <title>YUM TO DNF: Amazon Linux_2023 Package Manager.</title>
      <dc:creator>Giri Dharan</dc:creator>
      <pubDate>Sat, 22 Nov 2025 14:42:28 +0000</pubDate>
      <link>https://forem.com/giridharan_devops/yum-to-dnf-amazon-linux2023-package-manager-7m0</link>
      <guid>https://forem.com/giridharan_devops/yum-to-dnf-amazon-linux2023-package-manager-7m0</guid>
      <description>&lt;p&gt;Amazon Linux changed its package manager from yum to DNF starting with Amazon Linux 2023 (AL2023). The main motivation for this change was to adopt the more modern, efficient, and secure package manager that DNF provides, which is now the standard across most Red Hat-based distributions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reasons for the Change
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;DNF (Dandified YUM) is the successor to yum and offers major improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster and more reliable dependency resolution, thanks to a new dependency solver and persistent metadata cache.&lt;/li&gt;
&lt;li&gt;Improved performance and lower system resource usage compared to yum.&lt;/li&gt;
&lt;li&gt;Enhanced support for parallel operations, extension/plugin development, and delta RPMs for better update efficiency.&lt;/li&gt;
&lt;li&gt;A stricter and more predictable API, facilitating the development of automation and third-party integrations.&lt;/li&gt;
&lt;li&gt;More robust security and better memory management.&lt;/li&gt;
&lt;li&gt;Aligning with industry standards, as DNF had already replaced yum as the default in Fedora (since version 22), CentOS (version 8+), Rocky Linux, and RHEL 8+.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  When Was the Change Made?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The transition occurred with the release of Amazon Linux 2023 (AL2023). Earlier releases, like Amazon Linux 2 (AL2), used yum as the default package manager.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From AL2023 onward, all yum-like commands should be executed using dnf. The commands remain almost identical, ensuring backward compatibility for users transitioning from yum to dnf.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Summary Table: Amazon Linux Package Manager Evolution
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Version&lt;/th&gt;
&lt;th&gt;Package Manager&lt;/th&gt;
&lt;th&gt;Reason for Switch&lt;/th&gt;
&lt;th&gt;First Released&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Amazon Linux 2&lt;/td&gt;
&lt;td&gt;yum&lt;/td&gt;
&lt;td&gt;Older, less efficient dependency handling&lt;/td&gt;
&lt;td&gt;2017&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Amazon Linux 2023&lt;/td&gt;
&lt;td&gt;dnf&lt;/td&gt;
&lt;td&gt;Modern, faster, secure, aligns with RHEL&lt;/td&gt;
&lt;td&gt;2022&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Every major Red Hat-based Linux distribution has shifted to DNF for improved reliability, performance, and future compatibility, making it the logical default for Amazon Linux going forward.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>archlinux</category>
      <category>aws</category>
      <category>dependencyinversion</category>
    </item>
    <item>
      <title>SIM CARD AND ITS WORKING PROCESS: Networks and its Components.</title>
      <dc:creator>Giri Dharan</dc:creator>
      <pubDate>Fri, 21 Nov 2025 15:21:41 +0000</pubDate>
      <link>https://forem.com/giridharan_devops/sim-card-and-its-working-process-networks-and-its-components-3m6g</link>
      <guid>https://forem.com/giridharan_devops/sim-card-and-its-working-process-networks-and-its-components-3m6g</guid>
      <description>&lt;p&gt;A SIM (Subscriber Identity Module) card is a small integrated circuit that enables mobile devices to connect securely to cellular networks. It acts as a digital identity card for the user, storing critical information that allows the device to authenticate with the network, access services, and maintain secure communication. The SIM card is essential for making calls, sending texts, and using mobile data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Functions of a SIM Card
&lt;/h3&gt;

&lt;p&gt;The primary function of a SIM card is to authenticate and identify the user on a mobile network. When a device is powered on, the SIM card communicates with the nearest cell tower to establish a secure connection. The SIM contains several key pieces of data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;International Mobile Subscriber Identity (IMSI):&lt;/strong&gt; A unique number that identifies the subscriber to the network. This is used during authentication and roaming.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Integrated Circuit Card Identifier (ICCID):&lt;/strong&gt; The SIM card's serial number, used to identify the physical card itself.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Authentication Key (Ki):&lt;/strong&gt; A secret cryptographic key stored securely on the SIM. It is never transmitted over the air and is used to verify the user's identity during network authentication.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Location Area Identity (LAI):&lt;/strong&gt; Tracks the current location of the device for network routing and roaming.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Service Provider Information:&lt;/strong&gt; Stores details about the user's plan, available services, and network preferences.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Contacts and SMS:&lt;/strong&gt; Older SIM cards could store contacts and text messages, but modern smartphones typically store this data on the device itself.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When a device attempts to connect to a network, the SIM card sends its IMSI and authentication credentials to the carrier's network. The network verifies these credentials using the Ki key and, if valid, grants access to services like calls, texts, and data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Internal Components of a SIM Card
&lt;/h3&gt;

&lt;p&gt;A SIM card is a smart card built around a silicon microcontroller. Its main internal components include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Microcontroller (CPU):&lt;/strong&gt; A small processor that runs the SIM's operating system and manages data storage and communication.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Memory (ROM, RAM, EEPROM):&lt;/strong&gt; Stores the SIM's operating system, user data (like contacts and SMS), and critical network information. Modern SIMs typically have 32–256 KB of memory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Operating System:&lt;/strong&gt; Manages the SIM's functions, including authentication, data storage, and secure communication with the device.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security Module:&lt;/strong&gt; Handles cryptographic operations, such as generating authentication responses and protecting the Ki key.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Contact Pads:&lt;/strong&gt; Physical gold-plated pads on the card's surface that connect to the device's SIM slot, enabling data transfer.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The SIM card communicates with the mobile device through a standardized protocol (ISO/IEC 7816), allowing it to exchange data securely and efficiently.&lt;/p&gt;

&lt;h3&gt;
  
  
  How a SIM Card Detects Network Signal Strength
&lt;/h3&gt;

&lt;p&gt;The SIM card itself does not directly measure network signal strength. Instead, it relies on the mobile device's hardware (specifically the radio frequency (RF) module and antenna) to detect and report signal levels. Here's how the process works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Device Hardware:&lt;/strong&gt; The phone's RF module continuously scans for available cellular networks and measures the strength of the received signal (usually in dBm).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Network Registration:&lt;/strong&gt; The SIM card provides the IMSI and authentication credentials to the network, allowing the device to register and maintain a connection.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Signal Reporting:&lt;/strong&gt; The device's operating system (not the SIM) displays the signal strength (bars or dBm value) based on the RF module's measurements. The SIM card is involved in maintaining the connection but does not directly measure signal strength.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the device moves between cell towers or experiences changes in signal quality, the RF module updates the signal strength, and the device's software reflects this change. The SIM card ensures that the device remains authenticated and connected to the network, but the actual detection of signal strength is handled by the phone's hardware.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security and Authentication Process
&lt;/h3&gt;

&lt;p&gt;The SIM card plays a crucial role in securing mobile communications. When a device connects to a network, the following authentication process occurs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The device sends the IMSI to the network.&lt;/li&gt;
&lt;li&gt;The network challenges the SIM card with a random number.&lt;/li&gt;
&lt;li&gt;The SIM card uses the Ki key to generate a cryptographic response.&lt;/li&gt;
&lt;li&gt;The network verifies the response. If it matches, the device is granted access.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This process ensures that only authorized users can access the network, protecting against unauthorized use and SIM cloning.&lt;/p&gt;




&lt;p&gt;The SIM card is a vital component of mobile communication, acting as a secure digital identity that enables devices to connect to cellular networks, authenticate users, and maintain secure communication. Its internal components work together to store critical data and manage network interactions, while signal strength detection is handled by the device's hardware, not the SIM itself.&lt;/p&gt;

</description>
      <category>network</category>
      <category>electron</category>
      <category>webcomponents</category>
      <category>mobile</category>
    </item>
  </channel>
</rss>
