Indiana Jones
Member
- Joined
- Oct 16, 2002
- Professional Status
- Licensed Appraiser
- State
- Indiana
53 years old. Been doing this 25 years. 5 years from retirement. Don't care.
Gonna call BS on this, especially considering it's a Press Release (pay to hype).From AI appraisals to AI appraisal selection and management:
AppraisalVision has restructured its platform into what it describes as the mortgage industry’s first fully autonomous appraisal execution system. This comes on the heels of a new partnership with Alpha7X, an artificial intelligence (AI) firm with a focus on automating mortgage operations.
The shift eliminates the need for traditional software-based appraisal order management systems. It allows AppraisalVision’s technology to manage appraisals from initiation to delivery using AI agents.
The AI part is replacing the coordinators, and next up will be the reviewers. AMCs will not be replaced until AI can sit down and have coffee with chief appraisers from the GSEs.Gonna call BS on this, especially considering it's a Press Release (pay to hype).
This is not even an "AI" problem, it could be solved with last decades tech. It's a data and geographic competency issue.
All a system like this needs to work is enough data on the appraiser: license info, their coverage areas and competency (property types and report products). Then a pretty simple SQL query which matches that when a new loan comes through. And maybe some internal stats like their current workload, typical turn times, etc.
So yeah, replacing AMCs could and should be done. But you don't even need AI, you need platform momentum and have it be a good deal for the appraiser (free, the lender should pay to play).
The Realtors around here are extremely negotiable. LolIt was only a matter of time. What kills me is that the origination folks (and Realtors) think it's not coming after them as well. I suspect the mortgage origination experience will be primarily bot driven within the next 2 years. And don't even question whether someone would use AI for a real estate transaction when the AI agent is 1% but the 65 year old blue hair is taking 6%...
Like I said, this is not an AI problem. It's a standard data and geodata problem (routing) that Uber solved already a decade ago well before "AI", and in real time. No human or "AI" coordination needed. The Alpha7X thing is just hype. I'm neck deep in this stuff all and every day. As for reviewers, review work is actually a better use case for AI as it's great with unstructured data, keyword matching, etc - and it's already beginning to happen.The AI part is replacing the coordinators, and next up will be the reviewers. AMCs will not be replaced until AI can sit down and have coffee with chief appraisers from the GSEs.
-- Query with example inputs for the White House
SELECT * FROM (
WITH
-- Get property location (White House: 38.8977, -77.0365)
property AS (
SELECT
123 AS id, -- Example property ID
ST_SetSRID(ST_Point(-77.0365, 38.8977), 4326) AS geom_location,
'20500' AS zip_code, -- White House zip code
'single_family' AS property_type,
'standard' AS appraisal_complexity,
CURRENT_DATE + 5 AS requested_date -- Requesting appraisal 5 days from now
),
-- Find qualified appraisers with detailed availability
qualified_appraisers AS (
SELECT
a.id,
a.name,
a.phone,
a.email,
a.geom_location,
a.years_experience,
a.rating,
a.average_completion_time_days,
a.last_assigned_job_date,
a.job_capacity_per_week,
ST_Distance(
a.geom_location,
(SELECT geom_location FROM property)
) AS distance_meters,
-- Calculate current workload percentage
(SELECT COUNT(*) FROM assignments
WHERE appraiser_id = a.id
AND status IN ('assigned', 'in_progress')
AND due_date BETWEEN CURRENT_DATE AND CURRENT_DATE + INTERVAL '14 days')
/ a.job_capacity_per_week::float * 100 AS current_workload_percent,
-- Check specific availability on requested date
EXISTS (
SELECT 1 FROM appraiser_schedule s
WHERE s.appraiser_id = a.id
AND s.date = (SELECT requested_date FROM property)
AND s.available_hours > 0
AND s.is_blocked = false
) AS available_on_requested_date,
-- Calculate experience score with this property type
(
SELECT COUNT(*)
FROM completed_appraisals ca
WHERE
ca.appraiser_id = a.id
AND ca.property_type = (SELECT property_type FROM property)
AND ca.completion_date >= CURRENT_DATE - INTERVAL '2 years'
) AS relevant_experience_count,
-- Calculate local expertise score
(
SELECT COUNT(*)
FROM completed_appraisals ca
WHERE
ca.appraiser_id = a.id
AND ST_DWithin(
ca.property_location,
(SELECT geom_location FROM property),
8047 -- 5 miles in meters
)
AND ca.completion_date >= CURRENT_DATE - INTERVAL '2 years'
) AS local_appraisals_count
FROM
appraisers a
JOIN
appraiser_certifications ac ON a.id = ac.appraiser_id
JOIN
appraiser_competency c ON a.id = c.appraiser_id
WHERE
-- Handles single family 1004 appraisals
ac.certification_type = '1004_form'
-- Has FHA certification
AND ac.is_fha_certified = true
-- Is competent in the area (has completed jobs in proximity or in zip code)
AND (
c.zip_code = (SELECT zip_code FROM property)
OR EXISTS (
SELECT 1 FROM completed_appraisals ca
WHERE ca.appraiser_id = a.id
AND ST_DWithin(
ca.property_location,
(SELECT geom_location FROM property),
8047 -- 5 miles in meters
)
AND ca.completion_date >= CURRENT_DATE - INTERVAL '1 year'
GROUP BY ca.appraiser_id
HAVING COUNT(*) >= 3
)
)
-- Workload check
AND (
SELECT COUNT(*) FROM assignments
WHERE appraiser_id = a.id
AND status IN ('assigned', 'in_progress')
) < a.job_capacity_per_week
),
-- Calculate a balanced score for each appraiser
scored_appraisers AS (
SELECT
qa.*,
-- Calculate estimated travel time
(distance_meters / 1000) / 40 * 60 AS estimated_travel_mins,
-- Combined score calculation:
(
(100 - LEAST(current_workload_percent, 100)) * 0.35 + -- Lower workload is better
(CASE WHEN available_on_requested_date THEN 100 ELSE 0 END) * 0.20 + -- Available on requested date
(LEAST(local_appraisals_count * 5, 100)) * 0.25 + -- Local experience
(LEAST(relevant_experience_count * 2, 100)) * 0.15 + -- Relevant property experience
(100 - LEAST(distance_meters / 160, 100)) * 0.05 -- Distance factor (smaller impact)
) AS balanced_score,
-- Days since last assignment for round-robin
EXTRACT(DAY FROM (CURRENT_DATE - last_assigned_job_date)) AS days_since_last_assignment
FROM qualified_appraisers qa
WHERE
-- Additional availability filtering
current_workload_percent < 85 -- Has capacity
),
-- Apply round-robin logic
round_robin_selection AS (
SELECT
sa.*,
-- Round-robin score favors those who haven't had assignments recently
balanced_score * 0.7 + (LEAST(days_since_last_assignment, 30) / 30 * 100) * 0.3 AS final_score,
-- Ranking for alternative selections
ROW_NUMBER() OVER (ORDER BY balanced_score * 0.7 + (LEAST(days_since_last_assignment, 30) / 30 * 100) * 0.3 DESC) AS rank
FROM
scored_appraisers sa
)
-- Final selection with alternatives
SELECT
id,
name,
phone,
email,
years_experience,
rating,
distance_meters,
estimated_travel_mins,
local_appraisals_count,
relevant_experience_count,
current_workload_percent,
available_on_requested_date,
balanced_score,
days_since_last_assignment,
final_score,
rank,
CASE
WHEN rank = 1 THEN 'primary'
WHEN rank <= 3 THEN 'alternate'
ELSE 'backup'
END AS selection_status
FROM
round_robin_selection
ORDER BY rank
LIMIT 10
) AS results;